makefile - 为什么我被警告项目没有使用 "CMAKE_TOOLCHAIN_FILE"变量?

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

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

    CMAKE_TOOLCHAIN_FILE

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

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

最佳答案

这是 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 :

I can only get this to happen by running CMake on a build tree that already exists. The variable *does* get used on the *first* run in a fresh tree. It does *not* get used later because you don't need to specify it to regenerate. CMake has already recorded a rule to load the file in CMakeFiles/CMakeSystem.cmake and does not support changing the toolchain of an existing build tree.

IOW, this is a legitimate instance of the warning.

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

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

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

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

     rm -rf CMakeCache.txt CMakeFiles/
    

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

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

关于makefile - 为什么我被警告项目没有使用 "CMAKE_TOOLCHAIN_FILE"变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757506/

相关文章:

build - 如何清理 TeamCity 中旧的失败构建?

c# - IIS 7.5 Fixing 尝试加载格式错误的程序?

c# - Visual Studio - 无法删除项目配置

python - 在 setup.py 中清理构建目录

performance - 如何针对构建持续时间和 RAM 使用优化 gradle 构建性能?

c# - .g.cs 文件中的错误?

visual-studio - Visual Studio 中的内容构建操作是什么?

ios - Xcode 可以构建项目但不能在模拟器上运行

haskell - 我可以得到 `cabal install` 来使用多核吗?

build - 使用 cmake,您将如何禁用源内构建?