如何知道cmake项目生成是否成功结束

How to know whether the cmake project generation ended with success

最近几周我一直在研究构建自动化。在 Cmake 的帮助下,我能够为 Windows 生成 Visual Studio 解决方案和 MinGW 生成文件,并为 Linux 生成 GCC 生成文件。 Cmake 任务通过 Windows 上的批处理文件分别通过 Linux 上的 shell 脚本执行。一切看起来都正确并且按预期工作。我的计划是设置不同的测试服务器,整个构建和测试过程将自动化,结果将在某处报告。

我还没有弄明白的一件事是如何获取 cmake 命令的结果。我想知道 cmake 命令是否成功结束,所以如果出错,将报告失败。此时我能够解析结果并寻找 "Build files have been written to: ..." 句子,但我认为这不是真正可靠的解决方案。

有没有办法判断cmake命令是否成功?我不想一定要使用批处理文件,也欢迎使用 Python(或其他)脚本。谢谢。

有一个与最终目标相关联的附加操作,例如创建文件,或将带时间戳的日志条目附加到给定文件。

只需确保您的脚本确实以您正在调用的程序报告的错误级别退出。

让我举个例子来解释一下:

vs2015_x86_build.cmd

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
:: usage:
::          vs2015_x86_build.cmd <target> <config>
::                  <target> - target to be built (default: ALL_BUILD)
::                  <config> - configuration to be used for build (default: Debug)

if NOT "%1" == "" (SET CMAKE_TARGET=%1) else (SET CMAKE_TARGET=ALL_BUILD)
if NOT "%2" == "" (set CMAKE_BUILD_TYPE=%2) else (set CMAKE_BUILD_TYPE=Debug)
SET CMAKE_BINARY_DIR=vs2015_x86

IF NOT EXIST "%CMAKE_BINARY_DIR%\*.sln" (
    cmake -H"." -B"%CMAKE_BINARY_DIR%" -G"Visual Studio 14 2015"
    SET GENERATE_ERRORLEVEL=!ERRORLEVEL!
    IF NOT "!GENERATE_ERRORLEVEL!"=="0" (
        DEL /F /Q "%CMAKE_BINARY_DIR%\*.sln"
        EXIT /B !GENERATE_ERRORLEVEL!
    )
)
cmake --build "%CMAKE_BINARY_DIR%" --target "%CMAKE_TARGET%" --config "%CMAKE_BUILD_TYPE%"
SET BUILD_ERRORLEVEL=!ERRORLEVEL!
IF NOT "!BUILD_ERRORLEVEL!"=="0" (
    EXIT /B !BUILD_ERRORLEVEL!
)

ENDLOCAL 

参考资料