我对CMake的缓存变量感到困惑:
案例1:CACHE+FORCE
set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "" FORCE)
Run Code Online (Sandbox Code Playgroud)
"myflags"显示在CMakeCache.txt文件中."myflags"- 似乎FORCE比命令行-D...="..."参数具有更高的优先级.这是不希望的 - 我希望命令行参数覆盖"myflags".案例2:仅限 CACHE
set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "")
Run Code Online (Sandbox Code Playgroud)
CMakeCache.txt文件中没有任何内容.我希望"myflags"第一次出现."myflags".我对我的结论是否正确?或者做"默认变量",例如CMAKE_CXX_FLAGS表现不同?
有没有办法在第一次CMake运行期间"myflags"写入CMakeCache.txt文件(之前没有在此文件夹中运行CMake)?
我想"myflags"在缓存中的第一次CMake运行期间设置,然后允许用户使用命令行覆盖它.
如果我使用FORCE,用户不能通过命令行覆盖它.
如果我不使用FORCE,"myflags"在第一次运行期间不会写入缓存文件.
Pet*_*ter 12
这与文档中解释的行为一致:
通常,set(... CACHE ...)会创建缓存变量,但不会修改它们.如果指定了FORCE,则设置缓存变量的值,即使该变量已在缓存中.通常应该避免这种情况,因为它将删除用户对缓存变量值的任何更改.
CMAKE_CXX_FLAGS即使没有set(CMAKE_CXX_FLAGS ... CACHE ...)在CMakeLists.txt中,也存在于缓存中,因为CMAKE_CXX_FLAGS在编译器标志初始化期间已经设置了变量.