这一切都在问题中。当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 是否有可能在第一次报告错误后立即停止。
要使 CMake 在第一个错误处停止,请将以下内容添加到 CMakeLists.txt 文件中。
-Wfatal-errors
此选项会导致编译器在发生第一个错误时中止编译,而不是继续尝试并打印更多错误消息
如果您想了解或添加更多内容,可以阅读更多GCC 编译器选项。
对于那些不使用 CMake,但希望他们的编译器在第一个错误后停止的人,请在您的命令中使用该标志 g++ -Wfatal-errors foo.cpp
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 输出的第一条错误消息,然后退出。然后,您可以使用此输出来帮助识别错误的来源。
| 归档时间: |
|
| 查看次数: |
4842 次 |
| 最近记录: |