构建工具与包管理
- 在刀耕火种的时代,大家写的项目都不大,程序员们需要手动编译、链接、测试和部署项目。随着项目越来越大,这些工作越发繁琐且容易出错。为了提高开发效率和项目管理的便捷性,人们开发了各种构建工具和包管理工具,二者有时难以区分,且随着编程语言而异。
- 构建工具:用于自动化构建、编译、测试和部署项目的工具。
- 包管理:用于管理项目依赖、打包和分发项目的工具。
C/C++
Cmake
- CMake通过使用简单的配置文件 CMakeLists.txt,自动生成不同平台的构建文件(如 Makefile、Ninja 构建文件、Visual Studio 工程文件等),适用于大型和复杂项目。
- 注意:CMake 本身不是构建工具,而是生成构建系统的工具,它生成的构建系统可以使用不同的编译器和工具链。
Makefile
-
Makefile 最基本的规则为:
target ... : prerequisites ... recipe ... ...- prerequisites 中如果有一个以上的文件比 target 文件要新的话,recipe 所定义的命令就会被执行。
-
由此再引发出各种内置命令、变量等等
-
伪目标
- 经典的比如
clean,如果有一个文件叫clean,那么make clean就会出问题 - 为此我们把这种目标声明为伪目标,语法为
.PHONY: clean
- 经典的比如
-
多个 Makefile
- 子文件夹也有个 Makefile,那么在父文件夹的 Makefile 中可以这样写来调用子文件夹的 Makefile
all: $(MAKE) -C subdir <target>(optional) recipe - 使用 include 指令可以把别的 Makefile 包含进来
- 子文件夹也有个 Makefile,那么在父文件夹的 Makefile 中可以这样写来调用子文件夹的 Makefile
Python
- setuptools:用于打包和分发 Python 包,通常与
setup.py配合使用。 - Poetry:现代的 Python 项目管理和构建工具,简化依赖管理和打包。
- tox:用于自动化测试和构建的工具,支持多种 Python 版本和环境。
- venv:Python 内置的虚拟环境工具,主要优势是轻量级和易用。
pip
- Python 包管理工具,用于安装和管理依赖。
- 常用命令:
pip install <package>:安装包。pip uninstall <package>:卸载包。pip freeze:列出当前环境的所有包。pip list:列出当前环境的所有包和版本。pip show <package>:显示包的详细信息。pip search <package>:搜索包。pip install -r requirements.txt:从文件安装依赖。
- 使用前记得换源(一般是 tsinghua 源)
conda
- Anaconda 的包管理工具,比 venv 强大一些,支持除 Python 以外的其它包(如 cuda)
- 常用命令:
conda create -n <env_name> python=<version>:创建虚拟环境。conda activate <env_name>:激活虚拟环境。conda deactivate:退出虚拟环境。conda install <package>:安装包。conda remove <package>:卸载包。conda list:列出当前环境的所有包。conda search <package>:搜索包。conda env export > environment.yml:导出环境配置。conda env create -f environment.yml:从文件创建环境。
- 同样记得换源
Java
- Ant:基于 XML 的构建工具,适用于简单到中等复杂度的项目。
- Maven:项目管理和构建工具,使用
pom.xml文件定义项目配置和依赖。 - Gradle:灵活的构建工具,使用 Groovy 或 Kotlin DSL 定义构建脚本,适用于大型项目。
前端(JavaScript/TypeScript)
- npm:Node.js 包管理和构建工具,使用
package.json文件定义项目配置和依赖。 - pnpm:更快的 Node.js 包管理工具,使用符号链接共享依赖,比 npm 和 Yarn 更快且更节省空间。
- Yarn:Facebook 开发的包管理工具,提供更快的依赖安装和更好的依赖解析。
- Webpack:模块打包工具,适用于现代前端项目的构建和优化。
- Parcel:零配置的快速打包工具,适用于小型到中型项目。
- Gulp:基于流的自动化构建工具,适用于任务自动化和构建流程管理。
其他语言
- Rust:使用 Cargo 作为包管理和构建工具,提供依赖管理和构建脚本。
- Go:使用
go build和go mod进行构建和依赖管理。 - Ruby:使用 Rake 作为构建工具,类似于 Makefile,但使用 Ruby 语言编写构建脚本。
- PHP:使用 Composer 作为依赖管理工具,Phing 作为构建工具。