【问题标题】:Why am I warned that the "CMAKE_TOOLCHAIN_FILE" variable is not used by the project?为什么我警告说项目未使用“CMAKE_TOOLCHAIN_FILE”变量?
【发布时间】:2013-01-23 07:54:48
【问题描述】:

当我构建一些第三方代码时,我看到来自 CMake 的以下警告:

CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_TOOLCHAIN_FILE

是什么导致了这个警告?我检查了配置文件,但找不到定义此变量的任何地方。

我应该担心这个警告吗?如何修复它以使警告消失?

【问题讨论】:

  • 别管它。详情请参阅maillist
  • 为什么没有接受的答案?

标签: makefile cmake build


【解决方案1】:

这是 CMake 在您为其提供未使用的命令行选项时生成的标准警告。例如,当 CMakeLists.txt 文件实际上不使用FOO 变量时,将-DFOO=bar 传递给cmake

现在,这是一个特殊情况:CMAKE_TOOLCHAIN_FILE 在 CMake 第一次配置您的构建时使用,但是,由于您无法更改已配置构建的工具链,因此忽略此变量每隔一段时间;因此发出警告。

作为Answeror noted in a comment,您可以放心地忽略警告。 Brad King explained on the CMake mailing list on February 7, 2011:

我只能通过在已经存在的构建树上运行 CMake 来实现这一点 存在。变量 *does* 在 *first* 在新树中运行时使用。 它 * 不会 * 稍后使用,因为您不需要将其指定为 再生。 CMake 已经记录了加载文件的规则 CMakeFiles/CMakeSystem.cmake 并且不支持更改工具链 现有的构建树。

IOW,这是一个合法的警告实例。

如果这个警告真的让你感到困扰,你有几个选择来抑制它:

  • 您可以在运行cmake 时传递--no-warn-unused-cli 选项。

    不过,这有点生硬,因为它会抑制来自命令行上指定的未使用变量的所有警告。这可能会隐藏一些合法的警告。

  • 您可以在第二次调用之前删除第一次调用 CMake 生成的临时文件。如a comment by js. 中所述,您需要删除CMakeCache.txt 文件和CMakeFiles 文件夹。例如,通过执行:

     rm -rf CMakeCache.txt CMakeFiles/
    

    但是,作为javs notes,这有点毫无意义。除非您实际更改工具链,否则没有理由删除这些生成的文件。虽然它确实使警告消失了,但它只是通过强制重新生成文件来做到这一点,这会浪费时间来获得最小的收益。

  • Roland Sarrazin's answer 给出了第三个选项(也许是最好的)。这包括通过在状态消息中输出变量来简单地使用变量。这样,它就不会被使用,因此不会触发警告。您甚至可能会发现该消息对于调试与工具链配置相关的问题很有用。

【讨论】:

  • 我最终用rm -rf CMakeCache.txt CMakeFiles/删除了cmake文件。
  • 非常感谢js的上述评论!我正在删除 CMakeCache.txt 并且无法弄清楚为什么它仍然不起作用。删除 CMakeFiles 也是必不可少的。
  • 除非您更改工具链,否则无需删除 CMakeFiles 区域。是的,在那次运行中警告消失了,但是:1)它只会在下一次运行时重新出现 2)删除该区域没有任何效果。
  • 我认为因为它的答案引入了很多噪音,唯一正确的对策就是将变量用于状态消息。
【解决方案2】:

Guillaume's answer 已经解释了您收到此特定未使用变量警告的原因。

绕过警告的一种简单而有用的方法(不删除由第一次调用 CMake 生成的临时文件)是在状态消息中使用该变量。例如:

MESSAGE(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}")

【讨论】:

    【解决方案3】:

    如果您使用 CLion 收到此消息之后,您设置 -DCMAKE_TOOLCHAIN_FILE=xxx 选项,您需要删除所有 CMake 构建目录。

    Tools-> CMake -> Show Generated CMake Files in File Manager
    

    然后删除所有构建目录。然后做

    Tools-> CMake -> Reload the CMake Project
    

    一旦你这样做了,你仍然会收到警告,但至少会在第一次运行 cmake 时观察到它。

    【讨论】:

      【解决方案4】:

      正如@js 指出的那样,这里也发生了同样的情况,这通常意味着您已经从过去的配置中构建了 cmake 的残余物。

      执行rm -rf CMakeCache.txt CMakeFiles/,第一次执行cmake -DCMAKE_TOOLCHAIN_FILE=foo.cmake . 时消息将消失。第二次,他们将再次出现,正如@Guilaume 回答的那样,没关系。

      附: 我首先做了一个git clean --force,但由于这些文件通常位于.gitignore,所以不会重置构建。

      【讨论】:

      • “我首先做了一个 git clean --force 但由于这些文件通常在 .gitignore 中,所以不会重置构建。” -- 然后执行git clean -x --force,它也会删除被忽略的文件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      相关资源
      最近更新 更多