2 个版本

0.1.0-alpha.12024 年 5 月 2 日
0.1.0-alpha2023 年 4 月 23 日

#73 in 构建工具

Unlicense OR MIT

450KB
11K SLoC

Rust 的 CMake 解析器

cmake-parser 是一个 Rust 库,提供了一套工具,用于解析 CMake 文件和处理其中包含的数据。该库包括用于读取 CMake 文件的解析器,以及表示 CMake 文件中定义的数据的几个结构和枚举。

CMake 版本: v3.26

CMake 语言规范

https://cmake.org/cmake/help/v3.26/manual/cmake-language.7.html

功能

cmake-parser 库提供了以下功能

  • 解析 CMakeLists.txt 文件:该库包括用于读取 CMakeLists.txt 文件并提取其中定义的数据的解析器。
  • 错误处理:该库提供了一套错误类型,用于处理解析和处理 CMake 文件时可能发生的错误。

使用方法

将依赖项添加到 Cargo.toml

[dependencies]
cmake-parser = "0.1"

示例 src/main.rs

use cmake_parser::{parse_cmakelists, Doc};

let cmakelists = br#"""
add_custom_command(
  TARGET myExe POST_BUILD
  COMMAND someHasher -i "$<TARGET_FILE:myExe>"
                      -o "$<TARGET_FILE:myExe>.hash"
  VERBATIM)
"""#;

let cmakelists = parse_cmakelists(cmakelists).expect("valid CMakeLists.txt");
let doc = Doc::from(cmakelists);
let commands = doc.commands().expect("valid CMake commands");
dbg!(commands);

支持的命令

已实现:127 个中的 102 个。

脚本命令

这些命令始终可用。

  • block
  • break
  • cmake_host_system_information
  • cmake_language
  • cmake_minimum_required
  • cmake_parse_arguments
  • cmake_path
  • cmake_policy
  • configure_file
  • continue
  • else
  • elseif
  • endblock
  • endforeach
  • endfunction
  • endif
  • endmacro
  • endwhile
  • execute_process
  • file
  • find_file
  • find_library
  • find_package
  • find_path
  • find_program
  • foreach
  • function
  • get_cmake_property
  • get_directory_property
  • get_filename_component
  • get_property
  • if
  • include
  • include_guard
  • list
  • macro
  • mark_as_advanced
  • math
  • message
  • option
  • return
  • separate_arguments
  • set
  • set_directory_properties
  • set_property
  • site_name
  • string
  • unset
  • variable_watch
  • while

项目命令

这些命令仅在 CMake 项目中可用。

  • add_compile_definitions
  • 添加编译选项
  • 添加自定义命令
  • 添加自定义目标
  • 添加定义
  • 添加依赖
  • 添加可执行文件
  • 添加库
  • 添加链接选项
  • 添加子目录
  • 添加测试
  • 辅助源目录
  • 构建命令
  • 创建测试源列表
  • 定义属性
  • 启用语言
  • 启用测试
  • 导出
  • fltk包装UI
  • 获取源文件属性
  • 获取目标属性
  • 获取测试属性
  • 包含目录
  • 包含外部MS项目
  • 包含正则表达式
  • 安装
  • 链接目录
  • 链接库
  • 加载缓存
  • 项目
  • 移除定义
  • 设置源文件属性
  • 设置目标属性
  • 设置测试属性
  • 源分组
  • 目标编译定义
  • 目标编译特性
  • 目标编译选项
  • 目标包含目录
  • 目标链接目录
  • 目标链接库
  • 目标链接选项
  • 目标预编译头文件
  • 目标源文件
  • 尝试编译
  • 尝试运行

CTest命令

这些命令仅在CTest脚本中可用。

  • ctest_build
  • ctest_configure
  • ctest_coverage
  • ctest_empty_binary_directory
  • ctest_memcheck
  • ctest_read_custom_files
  • ctest_run_script
  • ctest_sleep
  • ctest_start
  • ctest_submit
  • ctest_test
  • ctest_update
  • ctest_upload

已弃用命令

这些命令已弃用,仅为了保持向后兼容。每个命令的文档中说明了它被弃用的CMake版本。不要在新代码中使用这些命令。

  • build_name
  • exec_program
  • export_library_dependencies
  • install_files
  • install_programs
  • install_targets
  • load_command
  • make_directory
  • output_required_files
  • qt_wrap_cpp
  • qt_wrap_ui
  • remove
  • subdir_depends
  • subdirs
  • use_mangled_mesa
  • utility_source
  • variable_requires
  • write_file

依赖关系

~1.2–1.9MB
~37K SLoC