我一直在收到消息
Re-run cmake no build system arguments
以及我新生的CMake构建系统的各种故障。我也用Google搜索了一下,发现出现错误消息的结果大约有十几个,但是这些命中都没有告诉您特定消息的含义。这些案例大多数都位于特定项目的网站上,因此特定项目的维护者只需跳过数小时的分析,并说明产生消息的原因,项目用户会乐于使用。
我还偶然发现了发出此文本的CMake源代码行。
if (this->CheckBuildSystemArgument.empty()) {
if (verbose) {
cmSystemTools::Stdout("Re-run cmake no build system arguments\n");
}
return 1;
}
因此,参数为空。这没有任何解释,因为对'cmake'的最小有效调用是
cmake .
这不是最好的调用:
cmake ..
假设当前目录为空,并且父目录具有CMakeLists.txt,则CMake专家认为它更好。一直使用CMake的人会认识到命令行上通常没有“ build system arguments”。如果搜索cmake.org文档,则没有诸如“构建系统”或“构建系统参数”之类的概念的文档。
我要构建的构建系统有些复杂,要在这里忠实地总结一下。因此,我想学习此消息的实际含义,以及有关如何使它消失的一些想法。实际上,我尝试最小化构建系统来解决另一个问题,但我什至没有重现该问题。最小化也位于外层,实际上是一个Makefile,涵盖了使用环境变量控制事物的问题。
因此,有人可以告诉我“重新运行cmake no build system arguments”是什么意思吗?
首先,在某些背景下,CMake文档中有很多有关构建系统的信息,因为这是CMake的主要功能。CMake是一个构建系统生成器。从文档中,总结了CMake在构建系统方面的作用:
一个构建系统介绍了如何从它的源代码使用建项目的可执行文件和库构建工具的过程自动化。例如,一个构建系统可能是
Makefile
与命令行生成工具或集成开发环境(IDE)的项目文件一起使用的。为了避免维护多个此类构建系统,项目可以使用以CMake语言编写的文件抽象地指定其构建系统。CMake通过这些文件通过称为生成器的后端为每个用户本地生成首选的构建系统。
考虑到这一点,CMake尝试通过为我们检查构建系统来使事情变得容易。这样,如果我们更新CMake文件,则不必记住要重新运行CMake并重新生成构建系统。从命令行调用时,默认情况下会运行此“构建系统检查” cmake
。但是,它也将在您构建代码时运行(例如,通过运行make
),以验证您的构建系统是最新的。
您实际上可以看到检查您的构建系统的特殊预定义CMake目标。对于基于Makefile的构建系统,在您的Makefile中将如下所示:
cmake_check_build_system:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0
.PHONY : cmake_check_build_system
--check-build-system
后面未公开的CMake命令行选项CMakeFiles/Makefile.cmake
是您要查找的“构建系统参数”。
这条信息:
Re-run cmake no build system arguments
cmake
由于CMake仍在内部执行构建系统检查,因此在运行时显示。在这种情况下,--check-build-system
不提供参数,因此CMake总是按预期重新生成。因此,这不是错误消息,而只是一条冗长的日志消息,它提供有关CMake所做的更多信息。
出于价值考虑,此“构建系统检查”应在所有CMake构建系统中进行。例如,Visual Studio创建一个ZERO_CHECK
具有相同行为的目标。它使用--check-stamp-list
命令行选项(也未记录)来检查以确保您的项目/解决方案是最新的。
另一个注意事项:您可以通过将变量切换为来禁用CMake的自动构建系统检查。只需将其放在顶级CMake文件的底部即可:CMAKE_SUPPRESS_REGENERATION
ON
set(CMAKE_SUPPRESS_REGENERATION ON)
当然,当您cmake
直接调用时,CMake总是会重新生成。但是,当此变量为时ON
,特殊的重新生成目标将被删除(cmake_check_build_system
对于Makefile,ZERO_CHECK
对于Visual Studio等)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句