调试cmake,变量在哪里定义?

问题描述 投票:0回答:2

我有非常复杂的 CMake 项目。变量通常定义为

set("${scope}_${variable_name}" value..)
或其他复杂的方式。

我需要找到变量在哪里定义,在哪里获取值。

我在 cmake 开始时尝试了

variable_watch
,但这只给了我
READ_ACCESS
,所以我猜设置变量不包含在
variable_watch
机制中。

我需要找出该变量的设置位置,但我没有主意了。变量监视没有帮助,由于变量定义复杂,搜索源失败。

cmake
2个回答
1
投票

您可以在 CMakeLists 之上添加:

macro(set name)
  message(STATUS "defining ${name}")
  _set(${name} ${ARGV})
endmacro()

set(a b)

并打印

CMAKE_CURRENT_LIST_*
变量。


1
投票

您可以在不修改 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
的逻辑的行。

© www.soinside.com 2019 - 2024. All rights reserved.