我使用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.file
的my-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"
参数来传递附加信息