我无法通过命令行设置配置变量。我无法从系统中确定它,所以我希望用户指定:
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
有人能指导我做错了吗?
我认为这与:
有关有任何想法或建议吗?
答案 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")
注意事项:
此方法仅影响 try_compile 命令的源流。当 try_compile
用于创建带有签名的成熟的 CMake 项目
try_compile(<resultVar> <bindir> <srcdir> <projectName> ...)
(设置环境变量的方法,如 @sorbet answer 中所述,在这种情况下非常有效。)
此方法不适用于使用 ExternalProject_Add
创建的子项目。
(在这种情况下,设置环境变量的方法也失败了。)