我对CMake的缓存变量感到困惑:

  • 情况1:CACHE + FORCE
    set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "" FORCE)
    
  • 第一次CMake运行: "myflags"按预期出现在CMakeCache.txt文件中。
  • 命令行选项:命令行选项不会覆盖"myflags"-似乎FORCE的优先级高于命令行-D...="..."参数。这是不希望的-我希望命令行参数覆盖"myflags"


  • 情况2:仅CACHE
    set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "")
    
  • 第一次CMake运行: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/

    10-10 05:18