3 个版本
0.1.2 | 2024年4月27日 |
---|---|
0.1.1 | 2024年4月25日 |
0.1.0 | 2024年4月25日 |
61 在 编程语言
107 每月下载量
62KB
1.5K SLoC
CPROJ-RS
描述
Cproj 是一个基本的 c/c++ 构建工具,它封装了 gcc/g++(或等效的)以实现增量编译。这主要是一个有趣的副作用项目,但我认为有些人可能会对此感兴趣。
要使用不是 gcc/g++ 的编译器,它必须是它们的等效物。这意味着它们必须使用与 gcc/g++ 相同的标志来实现相同的目的,因为 cproj 是专门为与 gcc/g++ 交互而设计的。如果您希望 cproj 与不同的编译器一起工作,请随意 fork 仓库。
安装说明
Cproj 可以通过两种方式安装:使用 cargo 或从源代码构建。
使用 cargo 安装
- 确保您已安装 cargo,可以使用此 指南 进行安装
- 运行
cargo install cproj-rs
从源代码构建
- 确保您已安装 cargo,可以使用此 指南 进行安装
- 克隆仓库
- 在项目根目录下,运行
cargo install --path .
如果您想避免手动克隆仓库,可以执行 cargo install --git https://github.com/DeveloperGY/cproj-rs
用法
创建项目
要使用 Cproj 创建项目,请运行 cproj new <project_name>
这将创建一个以项目名称命名的目录中的新 C 项目。
如果您想创建一个 C++ 项目,可以指定 --lang
标志并使用 "c++" 或 "cpp"。--lang
标志不区分大小写。您还可以通过指定 --lang
标志为 "c" 来指定它是一个 C 项目,尽管 Cproj 默认创建 C 项目。
项目名称可以由 --name
标志指定,但这不是必需的。
初始化项目
如果您已经有一个希望用项目初始化的目录,请运行 cproj init <project_name>
这将在当前目录下创建一个新的C项目。您可以使用如上所述的--lang
标志更改项目语言。
项目名称可以使用--name
标志标记,就像在cproj new
中一样,或者可以省略以告诉Cproj使用当前目录的名称。
构建/运行项目
Cproj通过检查文件最后修改时间来跟踪文件更改以实现增量编译。一些系统可能不支持这一点,如rust文档中所述,在这种情况下,Cproj将始终重新构建整个项目。
Cproj将只查找项目src目录中的更改。Cproj期望项目依赖的其他文件不会更改。更多细节将在项目配置部分中介绍。
要构建项目,请运行cproj build
这将以调试模式构建项目。如果您希望以发布模式构建,可以指定--release
标志。可选地,如果您希望更清楚地表明您打算以调试模式构建,可以指定--debug
标志。
项目将在./bin/[debug, release]目录下构建。在这个目录中,您将找到二进制文件以及一个时间戳文件。
时间戳文件用于跟踪项目上次以该模式构建的时间。如果时间戳文件被编辑,并且自上次构建项目以来源代码已更改,则值得运行(下面有说明)cproj clean
或删除时间戳文件。这将迫使Cproj在下次构建时重新构建整个项目。
在这个目录中,您还可以找到两个文件夹,log
和obj
。log
文件夹包含上一次构建的所有构建日志。如果有任何源文件Cproj决定不需要重新构建,则其以前的日志将保持不变。obj
文件夹包含cproj构建的所有对象文件。如果在删除相应的源文件时删除了其中任何一个,则值得运行cproj clean
或删除时间戳文件。必须这样做的原因是Cproj当前不检查obj文件夹以确定是否需要将源文件标记为编译。这计划在未来修复。
如果您在构建项目后想运行它,可以这样做。
- 您可以运行
cproj run
这将以调试模式构建项目,然后运行它。如果您希望以发布模式运行项目,可以指定--release
标志。可选地,如果您希望更清楚地表明您打算以调试模式构建,可以指定--debug
标志。
- 您可以运行
cproj build
然后自己运行二进制文件。
如果不想在运行项目时看到Cproj的构建输出,这个选项可能更有优势,因为Cproj总是在运行项目之前运行cproj build
。
清理项目
如果您想重新构建整个项目,或者对象文件/时间戳文件被篡改,可以运行cproj clean
该命令的实现相对简单,只是删除项目bin目录及其所有内容,然后重新创建文件夹结构。
如果您想清理项目的特定构建,只需进入构建目录并删除所有文件。请务必留下 log
和 obj
文件夹,因为如果找不到它们,Cproj 将会报错。
或者,如果您只想完全重新构建项目,请删除您想要重新构建模式的对应时间戳文件。
计划在将来使Cproj的清理系统更健壮。
帮助命令
要获取Cproj的一些基本使用细节,可以运行 cproj help
此命令的输出目前不如本README详细,因此只有在没有互联网连接的情况下才真正值得使用。
计划在将来使此命令变得更好。
配置项目
Cproj项目由一个名为 cproj.json
的文件标记。默认情况下,该文件看起来像这样。
{
"name": "project_name",
"cc": "gcc",
"include": [
"include"
],
"lib": [
"lib"
],
"link_flags": [],
"debug_flags": ["-Wall", "-Wextra"],
"release_flags": ["-Wall", "-Wextra", "-O2"],
"lang": "C"
}
name
字段指定项目名称。在构建文件时,它用于命名输出二进制文件。
cc
字段是用于编译项目的程序。
include
字段指定与 -I
一起包含到由 cc
指定的程序的路径。Cproj不会在指定的任何文件夹中查找更改。这意味着,如果您的项目更新了依赖项,您的源文件将不会与这些更改重新编译,除非这些源文件本身发生更改或您清理了项目。
lib
字段指定与 -L
一起包含到由 cc
指定的程序的路径。Cproj不会在指定的任何文件夹中查找更改。与 include
字段不同,当正确使用时,Cproj应包括在重建项目时链接的任何库的更改。
link_flags
字段指定应传递给链接阶段的全部标志。这也是您放置所有 -l
标志以链接项目所需库的地方。
debug_flags
字段指定在调试模式下构建项目时应传递给编译阶段的全部标志。
release_flags
字段指定在发布模式下构建项目时应传递给编译阶段的全部标志。
lang
字段指定项目语言。它可以是以 "C" 或 "Cpp" 开头的。此字段区分大小写。如果使用除 "C" 或 "Cpp" 之外的任何值,则需要读取项目配置的任何Cproj命令都将失败。此字段帮助Cproj确定要检查更改的源文件。以下列出了Cproj针对每种语言检查的文件扩展名。
C
- .c
- .h
- .i
Cpp
- .c
- .cc
- .cp
- .cxx
- .cpp
- .CPP
- .c++
- .C
- .i
- .ii
- .h
- .hh
- .H
- .hp
- .hxx
- .hpp
- .HPP
- .h++
- .tcc
这些文件扩展名是基于gcc手册确定的
贡献
目前这主要是我个人的项目,在我对自己的进展/努力满意之前,我希望尽量减少外部贡献。但说到底,提交问题或分支仓库是完全可以的,也是被鼓励的。我希望衡量自己作为开发者的进度,不应该影响其他人修改和改进他们使用的工具的权利。对于可能造成的任何不便,我深表歉意。
一旦项目达到我满意的状态,我会更新这一部分,并且愿意合并外部贡献。
依赖项
~0.7–1.6MB
~34K SLoC