检查工具链文件中的CMake缓存变量

时间:2015-02-19 17:51:16

标签: cmake

我无法通过命令行设置配置变量。我无法从系统中确定它,所以我希望用户指定:

cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain -DANDROID_ABI:STRING="arm64" ..

android.toolchain内,我有以下内容:

message(STATUS "Android ABI: ${ANDROID_ABI}")
if( "${ANDROID_ABI}" STREQUAL "" )
   message(FATAL_ERROR "Please specifiy ABI at cmake call -DANDROID_ABI:STRING=armeabi or -DANDROID_ABI:STRING=arm64")
endif()

无论如何,它在这条线上失败即使它打印出正确的arm64:

 -- Android ABI: arm64
CMake Error at yaml-cpp/android.toolchain:45 (message):
Please specifiy ABI at cmake call -DANDROID_ABI:STRING=armeabi or -DANDROID_ABI:STRING=arm64

有人能指导我做错了吗?


我认为这与:

有关
  • -D添加缓存变量而不是普通变量
  • 这是在工具链文件中......它似乎忽略了缓存变量

有任何想法或建议吗?

1 个答案:

答案 0 :(得分:1)

CMake 3.6 引入了变量 CMAKE_TRY_COMPILE_PLATFORM_VARIABLES,其中包含变量列表,自动从主项目传递到使用 try_compile 创建的项目。

工具链可以将其变量添加到该列表中,以便可以在子项目中提取它们:

message(STATUS "Android ABI: ${ANDROID_ABI}")
if( "${ANDROID_ABI}" STREQUAL "" )
   message(FATAL_ERROR "Please specifiy ABI at cmake call -DANDROID_ABI:STRING=armeabi or -DANDROID_ABI:STRING=arm64")
endif()

# propagate the variable into "inner" subprojects.
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES "ANDROID_ABI")

注意事项:

  1. 此方法仅影响 try_compile 命令的流。当 try_compile 用于创建带有签名的成熟的 CMake 项目

    时,它不起作用
    try_compile(<resultVar> <bindir> <srcdir> <projectName> ...)
    

    (设置环境变量的方法,如 @sorbet answer 中所述,在这种情况下非常有效。)

  2. 此方法不适用于使用 ExternalProject_Add 创建的子项目。 (在这种情况下,设置环境变量的方法也失败了。)