gpt4 book ai didi

caching - 对CMake的缓存变量设置优先级感到困惑

转载 作者:行者123 更新时间:2023-12-04 06:18:42 32 4
gpt4 key购买 nike

我对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中解释的行为一致:

    Normally, set(...CACHE...) creates cache variables, but does not modify them. If FORCE is specified, the value of the cache variable is set, even if the variable is already in the cache. This should normally be avoided, as it will remove any changes to the cache variable’s value by the user.



    即使在CMakeLists.txt中没有 CMAKE_CXX_FLAGS的情况下,缓存中也存在 set(CMAKE_CXX_FLAGS ... CACHE ...),因为 CMAKE_CXX_FLAGS变量已在编译器标志初始化期间设置。

    关于caching - 对CMake的缓存变量设置优先级感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26145865/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com