2023-简单点-make和build都是什么东西?

本文讨论了Make命令在根据makefile批量处理、依赖文件更新检测、目标编译优化以及makeinstall过程中的作用。同时介绍了CMake作为跨平台构建工具,支持cmake--build命令,确保不同生成器下的正确构建。

make

make命令根据makefile.txt中的命令进行批量处理。

编译时自动检查文件是否更新,如果文件已经更改,make会对他重新编译,否则跳过。

编译选定的目标,但是Make只编译上次编译变化过的文件,减少重复劳动,节省时间。
不从0开始

make install

build

一般包含了compile的操作,并且会生成对应的可执行文件。
理解为从0编译等构建

先执行clean ,清除全部的*.class文件,在将现有的文件编译生成*.class

cmake

又是个工具
对!
这玩意可以跨平台
比如:
cmake --build 形式的命令,主要是为了跨平台,使用这种形式后,不管你是使用的什么生成器,CMake 都能正确构建

<think> 我们正在讨论cmake --build buildmake命令之间的关系。根据引用[2]的内容,cmake --build主要是为了跨平台构建,它能够适配不同的生成器(如Make或Ninja),而直接使用make命令则依赖于具体的生成器。引用[3]则提到了使用cmake --build build前需要在build目录中先运行cmake ..以生成构建系统。 用户的问题:cmake --build buildmake的关系 分析: - `cmake --build build`:这是CMake提供的跨平台构建命令,它会自动调用底层构建工具(如make)来构建项目。其中`build`是指构建目录(即包含CMakeCache.txt其他构建文件的目录)。 - `make`:是GNU Make工具的命令,它读取Makefile文件来执行构建。在CMake生成的是Makefile的情况下,使用make就是在直接调用这个构建系统。 关系: 1. 当使用CMake生成器为“Unix Makefiles”时,在构建目录(build)下,`cmake --build build`实际上等同于在build目录下执行`make`。 2. 但是,`cmake --build`的优势在于跨平台生成器无关性。如果生成器是Ninja,那么`cmake --build build`会调用`ninja`,而直接使用`make`则无效。 3. 另外,`cmake --build`还提供了一些额外的选项,比如`--target`指定构建目标,`--config`指定构建配置(如Debug或Release)等,这些在跨平台构建时非常有用。 使用步骤(参考引用[3]): - 首先,在项目根目录下创建构建目录(例如`build`)并进入:`mkdir build && cd build` - 然后,运行`cmake ..`生成构建系统(例如Makefile) - 此时,可以选择在`build`目录下运行`make`,或者回到上级目录运行`cmake --build build`。后者不需要进入构建目录,并且可以自动调用正确的构建工具。 总结: - `cmake --build build`是一个更通用的命令,它抽象了底层的构建工具(make, ninja等),使得构建过程与生成器无关。 - 而`make`是直接调用GNU Make工具,仅当生成器为Make时可用。 因此,在生成器为Make的情况下,两者功能相同,但`cmake --build`更具通用性,尤其是在跨平台项目中。 根据要求,我们需要生成相关问题: §§相关问题§§ 1. 如何使用CMake生成Ninja构建系统? 2. `cmake --build`命令有哪些常用选项? 3. 如何指定构建目标(例如只构建某个库或可执行文件)? 4. 在CMake中如何配置不同的构建类型(如DebugRelease)? </think> ### CMake `cmake --build build` 与 `make` 的关系 `cmake --build build` `make` 都是项目构建命令,但存在以下核心区别联系: 1. **抽象层级不同** - `cmake --build build` 是 CMake 提供的**高级跨平台命令**,它会自动检测当前项目的构建系统(如 Make、Ninja、Visual Studio 等)并调用对应的底层构建工具[^2]。 - `make` 是**特定构建系统(Makefile)的直接调用命令**,仅适用于类 Unix 系统且生成器为 `Unix Makefiles` 的场景[^1]。 2. **跨平台能力** ```bash # 跨平台构建(自动调用 Make/Ninja/MSBuild 等) cmake --build build ``` - 此命令在 Windows(调用 MSBuild)、macOS/Linux(调用 Make/Ninja)等系统行为一致 - 直接使用 `make` 仅支持 Makefile 构建系统,在 Windows(无 MinGW)或 Ninja 生成器下会失败[^2]。 3. **目录要求** - `cmake --build build` 要求 `build` 目录是**有效的 CMake 构建目录**(含 `CMakeCache.txt` 生成器文件),通常需先执行: ```bash mkdir build && cd build cmake .. # 生成构建系统 ``` - `make` 直接要求当前目录存在 `Makefile`(由 `cmake` 生成)[^3]。 4. **功能扩展性** `cmake --build` 支持附加参数实现高级功能: ```bash # 指定构建目标配置类型 cmake --build build --target install --config Release ``` ### 工作流程对比 ```mermaid graph LR A[CMakeLists.txt] --> B{配置阶段} B -->|cmake -S. -Bbuild| C[生成构建系统] C --> D1[Makefile] --> E1[make -C build] C --> D2[Ninja.build] --> E2[cmake --build build] E1 --> F[二进制输出] E2 --> F ``` ### 总结 | **特性** | `cmake --build build` | `make` | |------------------------|----------------------------------------|----------------------------| | 跨平台 | ✅ 自动适配生成器 | ❌ 仅限 Makefile | | 构建目录要求 | 需预生成 CMake 构建目录 | 需预生成 Makefile | | 适用场景 | 多平台/多生成器项目 | 类 Unix 系统 + Makefile | | 构建目标指定 | `--target <name>` | `make <name>` | | 构建配置(如 Debug) | `--config Debug` | 需预定义 Makefile 规则 | 简单来说:**`cmake --build` 是跨平台构建的通用接口,而 `make` 是其底层实现的一种具体形式**。当项目使用 `Unix Makefiles` 生成器时,`cmake --build build` 本质上会执行 `make -C build` 命令[^1][^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值