我有非常复杂的 CMake 项目。变量通常定义为
set("${scope}_${variable_name}" value..)
或其他复杂的方式。
我需要找到变量在哪里定义,在哪里获取值。
我在 cmake 开始时尝试了
variable_watch
,但这只给了我READ_ACCESS
,所以我猜设置变量不包含在variable_watch
机制中。
我需要找出该变量的设置位置,但我没有主意了。变量监视没有帮助,由于变量定义复杂,搜索源失败。
您可以在 CMakeLists 之上添加:
macro(set name)
message(STATUS "defining ${name}")
_set(${name} ${ARGV})
endmacro()
set(a b)
并打印
CMAKE_CURRENT_LIST_*
变量。
您可以在不修改 cmake 文件的情况下执行此操作:只需使用
grep
(或 Windows 等效项)并结合使用 --trace-expand
选项运行 cmake 配置即可。
例如使用此选项
message("TGT_TYPE = ${TGT_TYPE}")
可能会导致控制台输出如下
/some/path/CMakeLists.txt(71): message(TGT_TYPE = UTILITY )
TGT_TYPE = UTILITY
所以
cmake --trace-expand build_dir | grep -P "[sS][eE][tT]\s*\(\s*VARIABLE_NAME\s"
应该为您提供包含在目录
VARIABLE_NAME
中设置的项目中设置 build_dir
的逻辑的行。