#cmake #cpp #api-bindings

cmake-file-api

解析和交互 CMake-file-api

4 个版本

新版本 0.1.2 2024 年 8 月 14 日
0.1.1 2024 年 8 月 8 日
0.1.0 2024 年 8 月 8 日
0.0.9 2024 年 8 月 8 日

#340文件系统

Download history 135/week @ 2024-08-02 247/week @ 2024-08-09

每月 382 次下载

Unlicense 或 MIT 许可

100KB
2K SLoC

GitHub Workflow Status

cmake-file-api-rs

用于与 cmake-file-api 交互的库

  • 编写查询
  • 读取回复

双许可 MIT 或 UNLICENSE

用法

运行 cargo add cmake-file-api 将 crate 添加到您的项目中。

示例

构建查询并解析 cmake-file-api

use cmake_file_api::{objects, query, reply};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let source_dir = std::path::Path::new("path/to/source/dir");
    let build_dir = std::path::Path::new("path/to/build/dir");

    // write query for codemodel-v2
    query::Writer::default()
        .request_object::<objects::CodeModelV2>()
        .write_stateless(build_dir)?;

    // run cmake
    assert!(std::process::Command::new("cmake")
        .arg("-S")
        .arg(source_dir)
        .arg("-B")
        .arg(build_dir)
        .status()?
        .success());

    // parse cmake-file-api
    let reader = reply::Reader::from_build_dir(build_dir)?;

    // read and print codemodel-v2
    let codemodel: objects::CodeModelV2 = reader.read_object()?;
    codemodel.configurations.iter().for_each(|config| {
        config.targets.iter().for_each(|target| {
            println!("{}", target.name);
            println!("{:#?}", target.sources);
        });
    });

    Ok(())
}

CMake-file-api

cmake-file-apicmaker-server 的前身,在 CMake 3.14 中引入。它提供了一个丰富的接口,用于查询配置和项目信息。API 是分版本的,当前版本是 v1。正如其名所示,该 API 基于文件,由 CMake 写入磁盘,并由客户端工具读取。 CMake 在构建目录的 .cmake/api/v1 目录中生成这些文件。V1 API 是一组描述 CMake 项目配置的 JSON 文件集合,它始终包含一个 index-*.json 文件,该文件列出了所有可用的对象。对象也各自分版本,例如 codemodel-v2.jsonCMake 将按需生成文件,并期望客户端首先在配置之前在 .cmake/api/v1/query 内写入查询。查询描述了客户端感兴趣的对象。使用状态查询,客户端还可以提供额外的客户端数据,该数据在回复中可用。
该 API 通常在 IDE 中使用,但也可用于其他工具用途,例如调用需要编译标志的工具。

相关项目

依赖关系

~0.8–1.7MB
~36K SLoC