title: Yocto Hello World C++ CMake Project is not able to compile a simple test program
body: <p>I'm failing to build the simple Hello World C++ CMake Project in Eclipse with Yocto plugin. Yocto's version is "thud".</p>
  
  <p>The local.conf have the line:</p>
  
  <pre><code>TOOLCHAIN_HOST_TASK_append += " nativesdk-cmake"
  </code></pre>
  
  <p>I've build the sdk</p>
  
  <pre><code>bitbake myBoard -c populate_sdk
  </code></pre>
  
  <p>I've installed the sdk, sourced the enviroment setup, launched eclipse from the same terminal and configured the yocto plugin.</p>
  
  <p>The enviroment script have the following variable:</p>
  
  <pre><code>export SDKTARGETSYSROOT=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  export CC="arm-fslc-linux-gnueabi-gcc  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=$SDKTARGETSYSROOT"
  export CXX="arm-fslc-linux-gnueabi-g++  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=$SDKTARGETSYSROOT"
  export CPP="arm-fslc-linux-gnueabi-gcc -E  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=$SDKTARGETSYSROOT"
  </code></pre>
  
  <p>When I try to build I have the following output (even sourcing the sdk's enviroment setup and then cmake from command line):</p>
  
  <pre><code>$ cmake ..
  -- The C compiler identification is GNU 8.2.0
  -- The CXX compiler identification is GNU 8.2.0
  -- Check for working C compiler: /yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/bin/arm-fslc-linux-gnueabi/arm-fslc-linux-gnueabi-gcc
  -- Check for working C compiler: /yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/bin/arm-fslc-linux-gnueabi/arm-fslc-linux-gnueabi-gcc -- broken
  CMake Error at /yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/share/cmake-3.12/Modules/CMakeTestCCompiler.cmake:52 (message):
    The C compiler
  
      "/yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/bin/arm-fslc-linux-gnueabi/arm-fslc-linux-gnueabi-gcc"
  
    is not able to compile a simple test program.
  
    It fails with the following output:
  
      Change Dir: /yocto/eclipse-ws/prova/Debug/CMakeFiles/CMakeTmp
  
      Run Build Command:"/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/bin/make" "cmTC_4df0b/fast"
      /yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/bin/make: 1: /yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/bin/make: Syntax error: word unexpected (expecting ")")
  
  
    CMake will not be able to correctly generate this project.
  Call Stack (most recent call first):
    CMakeLists.txt:4 (PROJECT)
  
  
  -- Configuring incomplete, errors occurred!
  See also "/yocto/eclipse-ws/prova/Debug/CMakeFiles/CMakeOutput.log".
  See also "/yocto/eclipse-ws/prova/Debug/CMakeFiles/CMakeError.log".
  </code></pre>
  
  <p>Someone see something wrong or missing that is causing the error?</p>
  
  <p>Thank you in advance for any help</p>
  
  <p><strong>Update</strong><br>
  The CMakeOutput.log show:</p>
  
  <pre><code>The system is: Linux - 4.15.0-47-generic - x86_64
  Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
  Compiler: /yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/bin/arm-fslc-linux-gnueabi/arm-fslc-linux-gnueabi-gcc 
  Build flags: ;;;--sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi;;-march=armv7-a;-mthumb;-mfpu=neon;-mfloat-abi=hard;
  Id flags:  
  
  The output was:
  0
  
  
  Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"
  
  The C compiler identification is GNU, found in "/yocto/eclipse-ws/prova/Debug/CMakeFiles/3.12.2/CompilerIdC/a.out"
  
  Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
  Compiler: /yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/bin/arm-fslc-linux-gnueabi/arm-fslc-linux-gnueabi-g++ 
  Build flags: ;;;--sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi;;-march=armv7-a;-mthumb;-mfpu=neon;-mfloat-abi=hard;;-fpermissive
  Id flags:  
  
  The output was:
  0
  
  Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
  
  The CXX compiler identification is GNU, found in "/yocto/eclipse-ws/prova/Debug/CMakeFiles/3.12.2/CompilerIdCXX/a.out"
  </code></pre>
  
  <p><strong>Update 2</strong><br>
  If I remove everything from the Debug folder and run cmake from command line I have a success and I can build even in Eclipse. If I change something in CMakeLists.txt then the error show up again.</p>
  
  <p>I see that Debug/CMakeFiles/3.12.2/CMakeSystem.cmake is different when it is generated by eclipse or by command line:  </p>
  
  <p><em>Eclipse</em>)</p>
  
  <pre><code>set(CMAKE_HOST_SYSTEM "Linux-4.15.0-47-generic")
  set(CMAKE_HOST_SYSTEM_NAME "Linux")
  set(CMAKE_HOST_SYSTEM_VERSION "4.15.0-47-generic")
  set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
  
  include("/yocto/eclipse-ws/prova/toolchain.cmake")
  
  set(CMAKE_SYSTEM "Linux-4.15.0-47-generic")
  set(CMAKE_SYSTEM_NAME "Linux")
  set(CMAKE_SYSTEM_VERSION "4.15.0-47-generic")
  set(CMAKE_SYSTEM_PROCESSOR "x86_64")
  
  set(CMAKE_CROSSCOMPILING "FALSE")
  
  set(CMAKE_SYSTEM_LOADED 1)
  </code></pre>
  
  <p><em>Command Line</em>)</p>
  
  <pre><code>set(CMAKE_HOST_SYSTEM "Linux-4.15.0-47-generic")
  set(CMAKE_HOST_SYSTEM_NAME "Linux")
  set(CMAKE_HOST_SYSTEM_VERSION "4.15.0-47-generic")
  set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
  
  include("/yocto/sdk/aw70pc_am8000/sysroots/x86_64-fslcsdk-linux/usr/share/cmake/OEToolchainConfig.cmake")
  
  set(CMAKE_SYSTEM "Linux")
  set(CMAKE_SYSTEM_NAME "Linux")
  set(CMAKE_SYSTEM_VERSION "")
  set(CMAKE_SYSTEM_PROCESSOR "armv7at2hf-neon-fslc")
  
  set(CMAKE_CROSSCOMPILING "TRUE")
  
  set(CMAKE_SYSTEM_LOADED 1)
  </code></pre>
  
  <p>From what I understand the eclipse plugin is generating a configuration that use the arm toolchain to compile a test program, not crosscompiling, and obviously it fail. Cmake from command line instead generate it the right way but it's overwritten by the first change in eclipse.</p>
  
  <p>Here's the printenv as requested by danlor</p>
  
  <pre><code>ARCH=arm
  CONFIG_SITE=/yocto/sdk/myBoard/site-config-armv7at2hf-neon-fslc-linux-gnueabi
  SDKTARGETSYSROOT=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  CFLAGS= -O2 -pipe -g -feliminate-unused-debug-types 
  KCFLAGS=--sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  OECORE_ACLOCAL_OPTS=-I /yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/share/aclocal
  CC=arm-fslc-linux-gnueabi-gcc  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  OECORE_DISTRO_VERSION=2.6
  OECORE_SDK_VERSION=2.6.1
  PKG_CONFIG_SYSROOT_DIR=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  CXXFLAGS= -O2 -pipe -g -feliminate-unused-debug-types 
  STRIP=arm-fslc-linux-gnueabi-strip
  OBJCOPY=arm-fslc-linux-gnueabi-objcopy
  CONFIGURE_FLAGS=--target=arm-fslc-linux-gnueabi --host=arm-fslc-linux-gnueabi --build=x86_64-linux --with-libtool-sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  OECORE_NATIVE_SYSROOT=/yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux
  RANLIB=arm-fslc-linux-gnueabi-ranlib
  OBJDUMP=arm-fslc-linux-gnueabi-objdump
  AS=arm-fslc-linux-gnueabi-as 
  AR=arm-fslc-linux-gnueabi-ar
  TARGET_PREFIX=arm-fslc-linux-gnueabi-
  NM=arm-fslc-linux-gnueabi-nm
  CXX=arm-fslc-linux-gnueabi-g++  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  OECORE_TARGET_OS=linux-gnueabi
  OECORE_TARGET_ARCH=arm
  OECORE_TARGET_SYSROOT=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  CROSS_COMPILE=arm-fslc-linux-gnueabi-
  OE_CMAKE_TOOLCHAIN_FILE=/yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux/usr/share/cmake/OEToolchainConfig.cmake
  CPPFLAGS=
  LDFLAGS=-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed
  OE_CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX=
  OECORE_BASELIB=lib
  PKG_CONFIG_PATH=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/lib/pkgconfig:/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi/usr/share/pkgconfig
  CPP=arm-fslc-linux-gnueabi-gcc -E  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  LD=arm-fslc-linux-gnueabi-ld  --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi
  </code></pre>
  
  <p>toolchain.cmake  </p>
  
  <pre><code># CMake system name must be something like "Linux".
  # This is important for cross-compiling.
  set(CMAKE_SYSTEM_PROCESSOR )
  set(CMAKE_C_COMPILER arm-fslc-linux-gnueabi-gcc)
  set(CMAKE_CXX_COMPILER arm-fslc-linux-gnueabi-g++)
  set(CMAKE_C_FLAGS "   --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard " CACHE STRING "CFLAGS")
  set(CMAKE_CXX_FLAGS "   --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard  -fpermissive" CACHE STRING "CXXFLAGS")
  set(CMAKE_C_FLAGS_RELEASE "  --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard  -DNDEBUG" CACHE STRING "CFLAGS for release")
  set(CMAKE_CXX_FLAGS_RELEASE "  --sysroot=/yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard  -DNDEBUG" CACHE STRING "CXXFLAGS for release")
  set(CMAKE_C_LINK_FLAGS "" CACHE STRING "LDFLAGS")
  set(CMAKE_CXX_LINK_FLAGS "" CACHE STRING "LDFLAGS")
  
  # only search in the paths provided so cmake doesnt pick
  # up libraries and tools from the native build machine
  set(CMAKE_FIND_ROOT_PATH /yocto/sdk/myBoard/sysroots/x86_64-fslcsdk-linux /yocto/sdk/myBoard/sysroots/armv7at2hf-neon-fslc-linux-gnueabi )
  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  
  # Use qt.conf settings
  set(ENV{QT_CONF_PATH} qt.conf)
  
  # We need to set the rpath to the correct directory as cmake does not provide any
  # directory as rpath by default
  set(CMAKE_INSTALL_RPATH )
  
  # Use native cmake modules
  set(CMAKE_MODULE_PATH /cmake/Modules/)
  
  # add for non /usr/lib libdir, e.g. /usr/lib64
  set(CMAKE_LIBRARY_PATH ${libdir} ${base_libdir})
  </code></pre>
  
  <h2>Workaround</h2>
  
  <p>I've found a way out</p>
  
  <p>Adding the following 2 lines in CMakeLists.txt will tell cmake that the compiler works and to not test it<br>
  SET (CMAKE_C_COMPILER_WORKS 1)<br>
  SET (CMAKE_CXX_COMPILER_WORKS 1)</p>
  
  <p>Now I can build successfully my own program and it works like a charm.<br>
  It means that Eclipse can crosscompile my program but when checking the system it build the test program in a different way.</p>