#build-tool #cc #wish #incremental #compiler #was #cproj

app cproj-rs

一个基本的 c/c++ 构建工具

3 个版本

0.1.2 2024年4月27日
0.1.1 2024年4月25日
0.1.0 2024年4月25日

61编程语言

Download history 436/week @ 2024-04-23 35/week @ 2024-04-30

107 每月下载量

MIT 许可证

62KB
1.5K SLoC

CPROJ-RS

描述

Cproj 是一个基本的 c/c++ 构建工具,它封装了 gcc/g++(或等效的)以实现增量编译。这主要是一个有趣的副作用项目,但我认为有些人可能会对此感兴趣。

要使用不是 gcc/g++ 的编译器,它必须是它们的等效物。这意味着它们必须使用与 gcc/g++ 相同的标志来实现相同的目的,因为 cproj 是专门为与 gcc/g++ 交互而设计的。如果您希望 cproj 与不同的编译器一起工作,请随意 fork 仓库。

安装说明

Cproj 可以通过两种方式安装:使用 cargo 或从源代码构建。

使用 cargo 安装

  1. 确保您已安装 cargo,可以使用此 指南 进行安装
  2. 运行 cargo install cproj-rs

从源代码构建

  1. 确保您已安装 cargo,可以使用此 指南 进行安装
  2. 克隆仓库
  3. 在项目根目录下,运行 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在下次构建时重新构建整个项目。

在这个目录中,您还可以找到两个文件夹,logobjlog文件夹包含上一次构建的所有构建日志。如果有任何源文件Cproj决定不需要重新构建,则其以前的日志将保持不变。obj文件夹包含cproj构建的所有对象文件。如果在删除相应的源文件时删除了其中任何一个,则值得运行cproj clean或删除时间戳文件。必须这样做的原因是Cproj当前不检查obj文件夹以确定是否需要将源文件标记为编译。这计划在未来修复。

如果您在构建项目后想运行它,可以这样做。

  1. 您可以运行cproj run

这将以调试模式构建项目,然后运行它。如果您希望以发布模式运行项目,可以指定--release标志。可选地,如果您希望更清楚地表明您打算以调试模式构建,可以指定--debug标志。

  1. 您可以运行cproj build然后自己运行二进制文件。

如果不想在运行项目时看到Cproj的构建输出,这个选项可能更有优势,因为Cproj总是在运行项目之前运行cproj build

清理项目

如果您想重新构建整个项目,或者对象文件/时间戳文件被篡改,可以运行cproj clean

该命令的实现相对简单,只是删除项目bin目录及其所有内容,然后重新创建文件夹结构。

如果您想清理项目的特定构建,只需进入构建目录并删除所有文件。请务必留下 logobj 文件夹,因为如果找不到它们,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