当我构建一些第三方代码时,我看到来自 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/