我对CMake的缓存变量感到困惑:
CACHE
+ FORCE
set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "" FORCE)
"myflags"
按预期出现在CMakeCache.txt
文件中。 "myflags"
-似乎FORCE
的优先级高于命令行-D...="..."
参数。这是不希望的-我希望命令行参数覆盖"myflags"
。 CACHE
set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "")
CMakeCache.txt
文件中什么都没有出现。我希望"myflags"
首次出现。 "myflags"
。 我对我的结论是否正确?还是像
CMAKE_CXX_FLAGS
这样的“默认变量”表现不同? 是否有办法在第一次CMake运行期间(如果以前不在此文件夹中运行CMake)将
"myflags"
写入CMakeCache.txt
文件? 我想在缓存中的第一个CMake运行期间设置
"myflags"
,然后允许用户使用命令行覆盖它。如果我使用
FORCE
,则用户无法通过命令行覆盖它。如果我不使用
FORCE
,则在第一次运行期间"myflags"
不会写在缓存文件中。 最佳答案
这与documentation中解释的行为一致:
即使在CMakeLists.txt中没有CMAKE_CXX_FLAGS
的情况下,缓存中也存在set(CMAKE_CXX_FLAGS ... CACHE ...)
,因为CMAKE_CXX_FLAGS
变量已在编译器标志初始化期间设置。
关于caching - 对CMake的缓存变量设置优先级感到困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26145865/