有没有办法从 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 命令行工具处理输出,例如 awkgrepcut 等。

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

【讨论】:

嗨,亚历克斯,感谢您的回答。我知道-N,但我想避免解析一些将来可能会改变的人类可读的输出。但更糟糕的是,似乎只打印了计算的缓存和环境,所以我仍然无法访问binaryDir,例如。无论如何,+1 将我指向 CMake 文件 API,我完全不知道它,它看起来对我的工作很有帮助。

以上是关于有没有办法从 CMake 中提取渲染的预设信息?的主要内容,如果未能解决你的问题,请参考以下文章

Geoserver WMS 预渲染

我想用 CMake 生成和编译 Visual Studio 项目我需要从构建中排除单元测试文件。有没有办法做到这一点?

如何从崩溃中提取调试信息

在 cmake 中使用预编译的 tensorflow

即使使用推荐的设置,也无法从渲染器/预加载脚本中访问电子函数

有什么方法可以从应用程序中提取文本?