I'm pretty sure that the toolchain bundled with the NDK, made by Google, hasn't been tested with other generators than Ninja or possibly Make. Also, there are some known bugs with it, including the one related to CMAKE_CXX_STANDARD (see https://code.google.com/p/android/issues/detail?id=227915 and https://github.com/android-ndk/ndk/issues/222 ).

I'd recommend using other generators if you want to use this toolchain or maybe try the Android support released with CMake 3.7.1 instead, though I have no idea if it's supposed to work with the Visual Studio generators either!

/Florent

On 15/12/2016 01:44, Scott Eberline wrote:
We have a large project library of mostly C++, mixed with a handful of
C. The C++ compilation commands look correct and work fine. But C
files are passed to clang++.exe -x c, rather than clang.exe. Which
should work, except that CMAKE_CXX_FLAGS is applied while
CMAKE_C_FLAGS is ignored. CMAKE_CXX_FLAGS includes options not
supported for C, so the build fails with messages like,

TRACKEDTOOLTASKWRAPPER`1 : error : invalid argument '-std=c++11' not
allowed with 'C/ObjC'

I've tried overriding the C++ options with C-compatible options, for
example set_source_files_properties(${C_SOURCES} PROPERTIES
COMPILE_FLAGS "-std=c99"). But I've found that per-file COMPILE_FLAGS
precede CMAKE_CXX_FLAGS on the resulting compiler command line, so the
C++ flags still get priority.

I've searched CMake list archives, Stack Overflow, Nvidia's
development tool forums etc. but not found any solution.

(Caveat - I'm trying to use NDK r13b which is not yet supported by
Nsight Tegra. So far, this just involves falsifying the NDK's revision
in its source.properties file, and creating a couple of directory
symbolic links so LLVM libc++ headers can be found where they lived in
NDK r12b. If falsifying the NDK version eventually causes problems,
I'll reconsider it, but for now it seems promising.)

CMake 3.7.1
Visual Studio 2015 Update 3
Nsight Tegra Visual Studio Edition 3.4
NDK r13b

cmake.exe ^
     -DANDROID_PLATFORM=android-24 ^
     -DANDROID_STL=c++_static ^
     -DCMAKE_C_FLAGS="-std=c99" ^
     -DCMAKE_C_STANDARD=99 ^
     -DCMAKE_C_STANDARD_REQUIRED=ON ^
     -DCMAKE_CXX_STANDARD=14 ^
     -DCMAKE_CXX_STANDARD_REQUIRED=ON ^
     
-DCMAKE_TOOLCHAIN_FILE=C:\Android\NDK-r13b\build\cmake\android.toolchain.cmake
^
     -G"Visual Studio 14 2015" ^
     -T"DefaultClang" ^

The generated CMakeCCompiler.cmake looks mostly correct, in particular
CMAKE_C_COMPILER and CMAKE_C_SOURCE_FILE_EXTENSIONS, although
CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES and
CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES are set for android-9 and GNU
libstdc++ rather than the values specified in ANDROID_PLATFORM and
ANDROID_STL. As an aside, it seems ANDROID_PLATFORM, ANDROID_STL,
CMAKE_C_STANDARD and CMAKE_CXX_STANDARD are completely ignored in the
generated VS project. I assume that's a topic for a different thread.

Thanks for taking the time to read; any advice is appreciated.


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to