【问题标题】:Is there a way to extract rendered preset information from CMake?有没有办法从 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/$env{FOO_VERSION}/bin:$penv{PATH}",
                "LD_LIBRARY_PATH": "/opt/foo/$env{FOO_VERSION}.0/lib"
            },
            "cacheVariables": {
                "FOO_VERSION": "$env{FOO_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 正在进行交叉引用和替换。

【问题讨论】:

标签: cmake build preset


【解决方案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 命令行工具处理输出,例如 awkgrepcut 等。

我认为这是你目前能做的最好的事情 (CMake command line documentation 或 file API for IDEs 中我找不到其他任何东西。

【讨论】:

  • 嗨,亚历克斯,感谢您的回答。我知道-N,但我想避免解析一些将来可能会改变的人类可读的输出。但更糟糕的是,似乎只打印了计算的缓存和环境,所以我仍然无法访问binaryDir,例如。无论如何,+1 将我指向 CMake 文件 API,我完全不知道它,它看起来对我的工作很有帮助。
猜你喜欢
  • 2021-08-20
  • 2022-07-18
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多