Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake Android交叉编译为调试和发布获取空编译器标志_Android_Cmake_Android Ndk - Fatal编程技术网

CMake Android交叉编译为调试和发布获取空编译器标志

CMake Android交叉编译为调试和发布获取空编译器标志,android,cmake,android-ndk,Android,Cmake,Android Ndk,为了演示此问题,我至少制作了一个CMakeLists.txt: cmake_minimum_required(VERSION 3.12) project(FlagsTest) add_executable(myapp myapp.cpp) 我使用Android NDK中的工具链文件配置这个cmake项目。使用Ninja生成器,cmake缓存变量ANDROID_ABI设置为armeabi-v7a。软件和工具链的版本为: Windows中的CMake:3.12.3和3.14.6 Android

为了演示此问题,我至少制作了一个CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(FlagsTest)

add_executable(myapp myapp.cpp)
我使用Android NDK中的工具链文件配置这个cmake项目。使用Ninja生成器,cmake缓存变量
ANDROID_ABI
设置为
armeabi-v7a
。软件和工具链的版本为:

  • Windows中的CMake:3.12.3和3.14.6
  • Android NDK和工具链文件:
    C:/Users/my_name/AppData/Local/Android/Sdk/NDK/20.0.5594570/build/cmake/Android.toolchain.cmake
  • 忍者:1.9.0
全部内容已成功配置并生成。但是,cmake缓存变量
cmake\u CXX\u FLAGS\u DEBUG
cmake\u CXX\u FLAGS\u RELEASE
cmake\u C\u FLAGS\u DEBUG
cmake\u C\u FLAGS\u RELEASE
均为空。这导致调试构建中没有调试符号,发布构建中也没有优化,这让我们非常困扰


目前,我通过从cmake命令行手动指定这些变量来解决问题。但是由于这些变量应该由cmake自动设置,我想知道这是cmake中的一个bug,还是Android SDK中的bug。

cmake将在内部处理发布和调试标志,您需要在命令行上通过
-DCMAKE\u BUILD\u TYPE=Release
-DCMAKE\u BUILD\u TYPE=Debug

这是由于ndk工具链文件中的配置不正确造成的。它为
CMAKE\u CXX\u FLAGS\u DEBUG
CMAKE\u CXX\u FLAGS\u RELEASE
设置空初始值,以防止CMAKE使用默认值:

set(CMAKE_C_FLAGS_DEBUG ""
  CACHE STRING "Flags used by the compiler during debug builds.")
set(CMAKE_CXX_FLAGS_DEBUG ""
  CACHE STRING "Flags used by the compiler during debug builds.")
set(CMAKE_C_FLAGS_RELEASE ""
  CACHE STRING "Flags used by the compiler during release builds.")
set(CMAKE_CXX_FLAGS_RELEASE ""
  CACHE STRING "Flags used by the compiler during release builds.")
由于直接修改此文件并不好,因此解决此问题的唯一方法似乎是在命令行中为每个第一代显式指定值