How to customize cmake output

2019-02-24 04:05发布

问题:

For example, when compiling .c files, I want cmake to just print

CC    xxx.c

to stdout, like linux kbuild.

回答1:

CMake output can be customized by suppressing the standard messages produced by CMake and outputting a custom message in a launcher script instead. Add the following code to your outermost CMakeLists.txt:

set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_SOURCE_DIR}/custom_output.sh")

Setting the global RULE_MESSAGES property to OFF will suppress the standard messages. The global RULE_LAUNCH_COMPILE property is set to a custom launch script named custom_output.sh which needs to be added to the root of the CMake source tree:

#!/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 "$@"

The script's executable bit needs to be set.

The linker output can be customized in the same fashion by also setting a RULE_LAUNCH_LINK script.



回答2:

This is not possible in the current version of CMake, without editing the source yourself. Of course sed and awk will help you.