CMake在命令失败时执行某些操作



我使用CMake。自定义生成步骤在失败时保存错误输出。

FIND_PROGRAM (BASH bash HINTS /bin)
SET (BASH_CMD "my-script input.file >output.file 2>error.file")
ADD_CUSTOM_COMMAND (
OUTPUT output.file
COMMAND ${CMAKE_COMMAND} -E env ${BASH} -c "${BASH_CMD}"
...)

这是有效的。如果给定的input.filemy-script失败,那么stderr将保存在error.file中,但是当我运行make并且目标构建失败时,正常输出不会使error.file的位置变得明显。(这个文件的实际路径是以一种混乱的方式生成的。(

我不希望在make期间在终端中显示嘈杂的stderr。我想做一些类似的事情

MESSAGE ("input.file failed, see error.file")

(最好是红色或其他颜色(,以便在output.file的命令失败时执行。

我可以在CMakeLists.txt食谱中表达这种行为吗?

不确定是否高亮显示,但您可以通过execute_process创建一个执行命令的cmake脚本文件,检查其错误代码,并在出现问题时打印自定义消息。以下示例在windows上运行,而不是在linux上运行,但这应该足以进行演示。

一些失败的命令:script.bat

echo "some long message" 1>&2
exit 1

CMake脚本:execute_script_bat.CMake

execute_process(COMMAND script.bat RESULT_VARIBALE _EXIT_CODE ERROR_FILE error.log)
if (NOT _EXIT_CODE EQUAL 0)
message(FATAL_ERROR "command failed; output see ${CMAKE_SOURCE_DIR}/error.log")
endif()

CMakeLists.txt

add_custom_command(
OUTPUT output.file
COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/execute_script_bat.cmake")

可以通过在"${CMAKE_COMMAND}"之后添加-D "SOME_VARIABLE=some value"参数来传递附加信息

最新更新