当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
您可以使用less
或ccmake
从顶部开始翻阅输出。控件是 的一部分less
,它不会填满您的终端缓冲区(它使用单独的缓冲区)。您需要使用重定向 将 stderr 传送到 stdout 2>&1
。(CCMake 是一个终端 UI,单独的包)
例如,cmake .. 2>&1 | less
或者ccmake ..
然后c运行 configure
如果您想要隐藏其他输出,即检测信息,您可以将 stdout 传送至 null ( cmake .. 2>&1 >/dev/null
)。
仅显示警告/错误(其后的整个消息文本)或仅显示一个错误很难做到,因为它们可能包含一个空白行,并且并不总是像这两个错误那样整洁。