“重新运行cmake no构建系统参数”是什么意思?

卡迪夫太空人

我一直在收到消息

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_REGENERATIONON

set(CMAKE_SUPPRESS_REGENERATION ON)

当然,当您cmake直接调用时,CMake总是会重新生成但是,当此变量为时ON,特殊的重新生成目标将被删除(cmake_check_build_system对于Makefile,ZERO_CHECK对于Visual Studio等)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

$ ENV在CMake中是什么意思

-cmake命令中的--j 8是什么意思

Azure WebJob“等待重新启动”是什么意思?

“系统语言”是什么意思?

“长时间运行的任务”是什么意思?

我什么时候应该重新运行cmake?

cmake命令行是什么意思

cmake中的“ $ <$ <CONFIG:Debug>:Release>”是什么意思?

CMake CMakeLists文件中的“ CACHE STRING”是什么意思?

/ usr / bin / cmake -E cmake_depends“ Unix Makefiles” <SOME_PATH>是什么意思?

运行命令\ dt是什么意思?

/../或“ /../”在文件系统中是什么意思?

说明结果中的“重新检查条件”是什么意思?

userWarning pymc3:重新参数化是什么意思?

Ember:在ember js中重新渲染是什么意思?

重新验证时失效的缓存策略是什么意思?

CMake教程中的“ set(CMAKE_REQUIRED_LIBRARIES“ m”)”是什么意思?

在单子内部运行是什么意思?

说在运行时创建类是什么意思?还有运行时在python中是什么意思?

在独立模式下运行gedit是什么意思?

htop正常运行后(!)是什么意思

htop屏幕中的“任务和运行”是什么意思?

当我运行lscpu时,“步进”是什么意思?

“您希望运行X Windows系统吗?”是什么意思?安装OpenBSD时该怎么做?

运行iostat -En时“无设备”是什么意思

ss --info的重新排序字段是什么意思?

“静默”文件系统是什么意思?

运行 Python 时 DeprecationWarning 是什么意思

Cargo 说“测试失败,重新运行 pass '--lib” - 这是什么意思?