【问题标题】:How to make the cmake-generated makefile stop at the first error如何使 cmake 生成的 makefile 在第一个错误处停止
【发布时间】:2020-06-27 03:04:36
【问题描述】:

我使用cmake 来管理我的项目的构建过程。每次我想重建它时,我需要做的只是cmake .. & make -j8,它工作得很好。

但我注意到,make 命令通常想输出很多错误然后最终停止。

这有点烦人:因为在大多数情况下,第一个 error 很重要,并且本质上是另一个 errors 的来源。

如何让 cmake 生成的 ma​​kefile 在第一个错误处停止,而不是继续做其他事情?

欢迎提出任何建议。


更新 1: 在@Kitsu 的帮助下,我能否意识到主要职责是在make -j8。如果我改用make -j1make 将在第一个错误处停止。

但是如果我们编译一个大项目,-j8 通常是有意义的...这里有没有其他方法可以告诉make 线程的完整集意识到,这是一个错误并立即停止自己?: )

【问题讨论】:

  • 请注意,您不必每次都手动运行cmake。你只需要运行一次,然后你可以运行make多次。如果 CMakeLists.txt 文件发生更改,那么下次您运行 make 时,它将自动为您重新运行 cmake。
  • 感谢指出!直到今天我才知道...
  • 嗨@MadScientist,刚才我测试了你的方法!我在 Ubuntu 18.04 LTS 上使用 cmake 3.10.2 和 GNU Make 4.1。但是当我在我的项目中添加一个新的 src 文件时,似乎只是 make 没能赶上它......
  • “添加新的 src 文件”我假设您的意思是您编辑了 CMakeLists.txt 文件并将该文件添加到与 add_executableadd_library 函数?我使用 CMake 已经 7 年了,而且每次都绝对有效。
  • Ummmm,很抱歉我只在 CMake 上工作了 1 年...比你的要短得多:) 可能是因为我使用了很多 aux_source_directory 来自动获取我的源列表导致CMake 无法自行刷新。

标签: makefile cmake


【解决方案1】:

-Wfatal-errors 标志可能会为 gcc 做这件事。您也可以尝试减少make 本身的并行度(例如make -j1)。

【讨论】:

  • 谢谢,我稍后试试,很快就会回来。
  • Update 1 在这个问题的正文中维护:)
  • 我认为生成的 makefile 没有正确同步,所以一般来说可能是不可能的。虽然,我不确定。我认为给用户一大堆错误是很常见的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 2017-12-28
  • 2014-12-16
  • 2017-09-30
  • 1970-01-01
  • 2018-02-11
  • 2011-03-29
相关资源
最近更新 更多