如何自定义cmake输出

Kan*_*bin 4 cmake build-system

例如,在编译.c文件时,我希望cmake只是打印

CC    xxx.c
Run Code Online (Sandbox Code Playgroud)

到stdout,就像linux kbuild一样.

sak*_*kra 8

可以通过抑制CMake生成的标准消息并在启动器脚本中输出自定义消息来自定义CMake输出.将以下代码添加到最外层CMakeLists.txt:

set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_SOURCE_DIR}/custom_output.sh")
Run Code Online (Sandbox Code Playgroud)

将全局RULE_MESSAGES属性设置为OFF将禁止标准消息.全局RULE_LAUNCH_COMPILE属性设置为名为的自定义启动脚本custom_output.sh,需要将其添加到CMake源树的根目录:

#!/bin/sh

# shell script invoked with the following arguments
# $(CXX) $(CXX_DEFINES) $(CXX_FLAGS) -o OBJECT_FILE -c SOURCE_FILE

# extract parameters
SOURCE_FILE="${@: -1:1}"
OBJECT_FILE="${@: -3:1}"

echo "CC `basename \"$SOURCE_FILE\"`"

# invoke compiler
exec "$@"
Run Code Online (Sandbox Code Playgroud)

需要设置脚本的可执行位.

通过设置RULE_LAUNCH_LINK脚本,可以以相同的方式自定义链接器输出.