CMake 可以在第一个错误处停止吗?

lou*_*uol 16 cmake

这一切都在问题中。当cmake遇到错误时,有时它不会立即停止而是继续处理所有CMake文件。只有在处理结束时我们才知道有错误,因此我们必须返回整个日志以查看它的位置。

是否有任何选项、变量或方法可以在第一个错误发生后立即停止 CMake?

澄清:我不是要停止源代码的编译,而是要停止 CMake 生成(例如在 Linux 上生成 Makefile)。

这是一个示例(这不是我的真实项目,这是专门为生成错误而设计的)。我的文件 CMakeLists.txt:

cmake_minimum_required(VERSION 3.6)
project(test)
set_property(TARGET foo PROPERTY PROP1 TRUE)
set_property(TARGET bar PROPERTY PROP2 TRUE)
Run Code Online (Sandbox Code Playgroud)

当我运行时,cmake .我得到输出:

CMake Error at CMakeLists.txt:3 (set_property):
  set_property could not find TARGET foo.  Perhaps it has not yet been
  created.


CMake Error at CMakeLists.txt:4 (set_property):
  set_property could not find TARGET bar.  Perhaps it has not yet been
  created.


-- Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)

我想知道的是 cmake 是否有可能在第一次报告错误后立即停止。

DrZ*_*Zoo 5

要使 CMake 在第一个错误处停止,请将以下内容添加到 CMakeLists.txt 文件中。

-Wfatal-errors
此选项会导致编译器在发生第一个错误时中止编译,而不是继续尝试并打印更多错误消息

如果您想了解或添加更多内容,可以阅读更多GCC 编译器选项

对于那些不使用 CMake,但希望他们的编译器在第一个错误后停止的人,请在您的命令中使用该标志 g++ -Wfatal-errors foo.cpp

  • 问题是关于配置阶段,当 `cmake` 运行时,甚至在编译开始之前。你的建议只会影响后期,不会解决问题。 (7认同)
  • 感谢您的回答,但我不是要停止编译,而是要停止 CMake 生成。我会澄清我的问题。 (6认同)
  • 太糟糕了,这个问题没有真正的答案:/。 (3认同)

Mus*_*did 0

awk您可以尝试使用类似或 之类的工具sed来解析 CMake 输出并提取第一条错误消息。以下是如何使用两者的示例:

$ cmake . 2>&1 | awk '/^CMake Error/ { print; exit }' // or
$ cmake . 2>&1 | sed -n '/^CMake Error/{p;q;}'
Run Code Online (Sandbox Code Playgroud)

这将打印 CMake 输出的第一条错误消息,然后退出。然后,您可以使用此输出来帮助识别错误的来源。