make include

makefile文件里头

必须要有第一个target,target定格或则空格,但不能[tab],

说有的规则必须[tab]

否则错误如下:

*** 遗漏分隔符

*** commands commence before first target。 停止。


bear.mk


bear.o:bear.cpp
    g++ -c bear.cpp


makefile

#
OBJECT = main.o show.o bear.o
server:$(OBJECT)
    g++ -o server $(OBJECT)
show.o: show.cpp
    g++ -c show.cpp
 include bear.mk
main.o: main.cpp
    g++ -c main.cpp
clean:
    rm server $(OBJECT)
#
### **`include` 指令在 Makefile 中的用法** `include` 是 **Makefile** 中的一个重要指令,用于 **包含其他 Makefile 文件**,类似于 C/C++ 中的 `#include`。它的主要作用是 **模块化管理 Makefile**,使构建系统更清晰、可维护。 --- ## **1. 基本语法** ```makefile include filename1 filename2 ... ``` - **`filename`** 可以是: - **其他 Makefile**(如 `common.mk`) - **动态生成的文件**(如 `config.mk`,由脚本生成) - **通配符匹配**(如 `include *.mk`) --- ## **2. 典型用途** ### **(1) 分离公共配置** ```makefile # 主 Makefile include config.mk # 包含编译选项、路径定义等 all: app @echo "Build finished" ``` ```makefile # config.mk(被包含的文件) CC = gcc CFLAGS = -Wall -O2 ``` ### **(2) 模块化构建** ```makefile # 主 Makefile include src/module1.mk include src/module2.mk all: module1 module2 ``` ### **(3) 动态加载依赖** ```makefile # 自动生成依赖关系(如 gcc -MMD) -include $(OBJS:.o=.d) # 包含 .d 文件(如果存在) ``` --- ## **3. 关键特性** | **特性** | **说明** | |-------------------|-------------------------------------------------------------------------| | **文件不存在时报错** | 默认情况下,如果文件不存在,`make` 会报错。 | | **`-include` 忽略错误** | 使用 `-include`(或 `sinclude`)时,文件不存在不会报错。 | | **变量展开后包含** | `include $(VAR)` 会先展开变量,再包含文件。 | | **递归包含** | 被包含的文件中也可以使用 `include`。 | --- ## **4. 常见问题与解决方案** ### **问题 1:文件不存在导致报错** ```makefile include non_existent.mk # 如果文件不存在,make 会报错 ``` **解决方案:使用 `-include` 忽略错误** ```makefile -include non_existent.mk # 文件不存在时静默跳过 ``` ### **问题 2:变量未展开** ```makefile FILE = config.mk include FILE # 错误!会尝试包含 "FILE" 而不是 "config.mk" ``` **修正:用 `$(FILE)` 展开变量** ```makefile FILE = config.mk include $(FILE) # 正确 ``` ### **问题 3:循环包含** ```makefile # file1.mk include file2.mk # file2.mk include file1.mk # 循环包含,导致 make 崩溃 ``` **解决方案:避免循环依赖,或使用条件判断** ```makefile ifndef FILE1_INCLUDED FILE1_INCLUDED = 1 include file2.mk endif ``` --- ## **5. 高级用法** ### **(1) 通配符匹配** ```makefile include modules/*.mk # 包含所有 .mk 文件 ``` ### **(2) 动态生成配置** ```makefile # 先生成 config.mk,再包含 $(shell ./generate_config.sh > config.mk) include config.mk ``` ### **(3) 条件包含** ```makefile ifeq ($(ENABLE_FEATURE),1) include feature.mk endif ``` --- ## **6. 对比其他指令** | **指令** | **作用** | **示例** | |--------------|---------------------------------|-----------------------------| | `include` | 包含文件(报错如果文件不存在) | `include config.mk` | | `-include` | 包含文件(忽略错误) | `-include local.mk` | | `sinclude` | 同 `-include`(GNU Make 兼容) | `sinclude override.mk` | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值