如何让CMake在执行自身命令前打印命令以调试配置流程?
实现CMake配置/生成阶段命令回显的方法
一、用CMake内置跟踪参数(最省事)
CMake自带命令行参数,直接就能实现类似bash -x的指令跟踪效果,完全不用改代码:
- 全量跟踪:执行CMake时加
--trace参数,会打印配置阶段所有执行的语句,包括set()、add_executable()这类核心指令,还会显示语句所在的文件和行号:cmake --trace .. - 带变量展开的跟踪:如果想看到变量实际展开后的内容,换成
--trace-expand参数:cmake --trace-expand .. - 仅跟踪特定文件:要是只关心某个CMake文件里的指令,用
--trace-source=<文件名>,比如只跟踪根目录的CMakeLists.txt:cmake --trace-source=CMakeLists.txt ..
这些参数会覆盖配置和生成阶段的指令跟踪,刚好匹配你的需求。
二、自定义指令包装(按需定制)
如果需要精准控制要跟踪的指令,或者想自定义打印格式,可以通过宏重写CMake指令:
在根CMakeLists.txt最开头加这段代码:
# 包装set指令,先打印再执行 macro(set) message(STATUS "EXECUTING: set(${ARGV})") _set(${ARGV}) endmacro() # 包装add_executable指令 macro(add_executable) message(STATUS "EXECUTING: add_executable(${ARGV})") _add_executable(${ARGV}) endmacro() # 其他需要跟踪的指令,比如add_library、target_link_libraries,都可以按这个格式添加
这里的_set、_add_executable是CMake的原始内置指令,通过宏重定义实现“先打印再执行”的逻辑。注意这段代码要放在所有其他CMake指令之前,不然前面的指令不会被跟踪到。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

