CMake 能在第一个错误时停止吗?

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)

当我运行时,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!

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

答案1

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

$ cmake . 2>&1 | awk '/^CMake Error/ { print; exit }' // or
$ cmake . 2>&1 | sed -n '/^CMake Error/{p;q;}'

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

答案2

您可以使用lessccmake从顶部开始翻阅输出。控件是 的一部分less,它不会填满您的终端缓冲区(它使用单独的缓冲区)。您需要使用重定向 将 stderr 传送到 stdout 2>&1。(CCMake 是一个终端 UI,单独的包)

例如,cmake .. 2>&1 | less或者ccmake ..然后c运行 ​​configure

如果您想要隐藏其他输出,即检测信息,您可以将 stdout 传送至 null ( cmake .. 2>&1 >/dev/null)。

仅显示警告/错误(其后的整个消息文本)或仅显示一个错误很难做到,因为它们可能包含一个空白行,并且并不总是像这两个错误那样整洁。

相关内容