我在通过命令行设置配置变量时遇到问题.我无法从系统中确定它,所以我希望用户指定:
cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain -DANDROID_ABI:STRING="arm64" ..
Run Code Online (Sandbox Code Playgroud)
在我的内心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()
Run Code Online (Sandbox Code Playgroud)
无论如何,它都会在这条线上失败,即使它打印出正确的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
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导我做错的事吗?
我认为这与以下内容有关:
有什么想法或建议吗?
我不会假装完全理解幕后发生的事情,但这是一个适用于我的解决方法:
# Problem: CMake runs toolchain files multiple times, but can't read cache variables on some runs.
# Workaround: On first run (in which cache variables are always accessible), set an intermediary environment variable.
if (FOO)
# Environment variables are always preserved.
set(ENV{_FOO} "${FOO}")
else ()
set(FOO "$ENV{_FOO}")
endif ()
Run Code Online (Sandbox Code Playgroud)