2 个版本
0.1.0-alpha.1 | 2024 年 5 月 2 日 |
---|---|
0.1.0-alpha | 2023 年 4 月 23 日 |
#73 in 构建工具
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