有没有办法从 CMake 中提取渲染的预设信息?
Posted
技术标签:
【中文标题】有没有办法从 CMake 中提取渲染的预设信息?【英文标题】:Is there a way to extract rendered preset information from CMake? 【发布时间】:2021-08-04 13:35:18 【问题描述】:我有一个使用继承和宏扩展的CMakePresets.json
文件。
这是一段摘录,实际上我使用了多个版本的“Foo”:
"configurePresets": [
"name": "default",
"hidden": true,
"generator": "Unix Makefiles",
"binaryDir": "cmake-build-$presetName",
"environment":
"PATH": "/opt/foo/$envFOO_VERSION/bin:$penvPATH",
"LD_LIBRARY_PATH": "/opt/foo/$envFOO_VERSION.0/lib"
,
"cacheVariables":
"FOO_VERSION": "$envFOO_VERSION",
,
"name": "debug-foo1",
"inherits": "default",
"environment": "FOO_VERSION": "1"
,
"name": "release-foo1",
"inherits": "debug-foo1",
"cacheVariables": "CMAKE_BUILD_TYPE": "Release"
],
"buildPresets": [
"name": "debug-foo1",
"configurePreset": "debug-foo1"
,
"name": "release-foo1",
"configurePreset": "release-foo1"
]
现在假设我选择了预设release-foo1
。除其他外,这将呈现以下变量:
binaryDir = "cmake-build-release-foo1"
FOO_VERSION = "1"
LD_LIBRARY_PATH = "/opt/foo/1.0/lib"
有没有办法查询给定预设的这些结果?例如,给定release-foo1
,我想知道生成的binaryDir
。
当然,我可以自己解析 JSON,但这似乎很乏味,尤其是因为 CMake 正在进行交叉引用和替换。
【问题讨论】:
***.com/questions/66786315/… + 只需jq
即可提取元素。
【参考方案1】:
您可以使用-N
标志打印计算的预设信息,而无需运行配置或生成步骤。在修改了您问题中的预设文件后,我在它旁边创建了一个 empty CMakeLists.txt 并运行了这个测试(***
代表我的PATH
):
$ cmake --preset=release-foo1 -N
Preset CMake variables:
CMAKE_BUILD_TYPE="Release"
FOO_VERSION="1"
Preset environment variables:
FOO_VERSION="1"
LD_LIBRARY_PATH="/opt/foo/1.0/lib"
PATH="/opt/foo/1/bin:***"
这足以调试您的预设。如果需要更进一步,可以使用标准的 unix 命令行工具处理输出,例如 awk
、grep
、cut
等。
我认为这是你目前能做的最好的事情 (CMake command line documentation 或 file API for IDEs 中我找不到其他任何东西。
【讨论】:
嗨,亚历克斯,感谢您的回答。我知道-N
,但我想避免解析一些将来可能会改变的人类可读的输出。但更糟糕的是,似乎只打印了计算的缓存和环境,所以我仍然无法访问binaryDir
,例如。无论如何,+1 将我指向 CMake 文件 API,我完全不知道它,它看起来对我的工作很有帮助。以上是关于有没有办法从 CMake 中提取渲染的预设信息?的主要内容,如果未能解决你的问题,请参考以下文章
我想用 CMake 生成和编译 Visual Studio 项目我需要从构建中排除单元测试文件。有没有办法做到这一点?