#compile #llvm #clang

compile_commands

在 Rust 程序中使用 compile_commands.json 和 compile_flags.txt

3 个不稳定版本

0.2.0 2024年7月16日
0.1.1 2024年7月14日
0.1.0 2024年7月10日

#448 in 开发工具

Download history 198/week @ 2024-07-08 773/week @ 2024-07-15 624/week @ 2024-07-22 455/week @ 2024-07-29

每月下载量 2,050
用于 asm-lsp

Apache-2.0

12KB
174

在 Rust 程序中使用 compile_commands.json 和 compile_flags.txt

目标

围绕 LLVM 项目提供的 compile_commands.jsoncompile_flags.txt 标准,提供一种薄封装类型。

示例用法

给定以下 compile_commands.json 文件

[
  { "directory": "/home/user/llvm/build",
    "arguments": ["/usr/bin/clang++", "-Irelative", "-DSOMEDEF=With spaces, quotes and \\-es.", "-c", "-o", "file.o", "file.cc"],
    "file": "file.cc" },

  { "directory": "/home/user/llvm/build",
    "command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\"With spaces, quotes and \\-es.\" -c -o file.o file.cc",
    "file": "file2.cc" }
]

或以下 compile_flags.txt 文件

-xc++
-I
libwidget/include/

解析它,并在您的 Rust 项目中将其用作类型安全的对象

use std::path::PathBuf;

use compile_commands::CompilationDatabase;

fn main() {
    // Create a `CompilationDatabase` object directly from a compile_commands.json file
    let comp_cmds = include_str!("compile_commands.json");
    let comp_data = serde_json::from_str::<CompilationDatabase>(&comp_cmds).unwrap();
    _ = comp_data;

    // Or create a `CompilationDatabase` object from a compile_flags.txt file
    let comp_flags = include_str!("compile_flags.txt");
    let comp_data =
        compile_commands::from_compile_flags_txt(&PathBuf::from("~/foo/build"), &comp_flags);
    _ = comp_data;
}

依赖项

~0.7–1.6MB
~35K SLoC