Skip to content

Latest commit

 

History

History
40 lines (22 loc) · 2.46 KB

README-zh-CN.md

File metadata and controls

40 lines (22 loc) · 2.46 KB

umake

一个用于 C++构建系统的最小化工具,可以在一定支持范围内自动扫描 C++20 模块导入依赖和源文件(中间对象)依赖。目前只提供了 cmake 的插件。同时,并非所有编译器都已支持 C++20 模块。

配置文件和扫描缓存均为可选内容,但前者默认禁用,后者默认启用。

注意事项

请尽量少使用一些可能会导致依赖分析错误的代码表达,比如条件包含和条件导入,umake 将在标准内尽可能提供正确的行为。

请避免在文件名中使用双下划线(它们被用于根据源文件依赖生成的临时静态库路径中斜线和反斜线的转义),除非您确定不会引发冲突或者关闭了自动源文件依赖分析,否则导致的构建错误将不会被视为本项目的 bug,如果确实出现很多同类问题,本项目可能但不一定会加以避免。

如果没有导入源文件对应的头文件(名称相同,后缀名相对应),那么源文件依赖无法被探测到。可以手动添加依赖。

模块实现单元已扫描,但我不清楚如何使用编译器命令行接口。

使用

用于 CMake

如例。目标名称和主源文件必须一一对应。

include(../umake/umake.cmake)
add_moduled_executables_with_a_main_source("../umake/umake.py" main main.cpp tests tests.cpp)

如果在当前目录下生成过配置文件,则路径名是可选的。

模块化的库(不是模块库)未经测试。

如果您很不巧地删除了预编译过的模块接口文件而没有删除对应中间对象文件,错误将几乎必定发生,请您清理并重新编译项目或者删除对应对象文件。

如果使用非 Ninja 的生成器,您可能但不一定会遇到某些错误,因为我可能没有在第一时间测试这些生成器,您可以通过 issue 的方式告知我并附上必要的信息,我将尽量修复。

Visual Studio 可能会显示无法删除.ifc 文件而无法重新编译,您可以关闭 VS (有时只需重启)然后手动删除它们(只需要删除无法删除的预编译模块接口文件,然后把对应所有CMakeFiles/*.dir,即含.o或者.obj等中间文件的文件夹删除),不过我认为最快的还是切换到另一个配置然后切换回来。

一般来说如果遇到增量编译问题,只需要重新开始编译(而非重新编译),或者重新编译主源文件这一个文件。

Visual Studio Code 未发现类似问题。