makefile(2)变量

替换: =
追加: +=
恒等于(常量): :=

```c
OBJ = main.o main2.o
TAR = sum
CC := gcc

$(TAR): $(OBJ)
	$(CC) $(OBJ) sum.cpp -o sum
	
main.o: main.cpp
	$(CC) -c main.cpp -o main.o

main2.o: main2.cpp
	$(CC) -c main2.cpp -o main2.o

隐式规则:

任意的文件: %.c   %.o
所有的文件:*.c    *.o
OBJ = main.o main2.o
TAR = sum
CC := gcc

$(TAR): %.o
	$(CC) %.o %.cpp -o sum		//任意的.o或者.cpp文件
	
main.o: main.cpp
	$(CC) -c main.cpp -o main.o

main2.o: main2.cpp
	$(CC) -c main2.cpp -o main2.o

通配符:

$@ : 所有的目标文件
$^ : 所有的依赖文件
$< : 所有的依赖文件的第一个文件

### 定义和使用环境变量Makefile中,可以利用多种方式处理环境变量。当定义环境变量时,这些变量可以在整个构建过程中被调用并影响编译行为[^3]。 #### 使用已存在的shell环境变量 如果某些环境变量已经在Shell环境中设定,则可以直接在Makefile里引用而无需重新声明。例如,在Linux系统上预先设置了`CC`作为C编译器路径: ```makefile # 假设 Shell 已经设置了 CC=gcc hello: hello.c $(CC) -o $@ $< ``` 这里假设外部Shell已经通过`export CC=gcc`指定了默认使用的GCC版本,那么上述规则会采用此值进行编译操作[^1]。 #### 显式地在Makefile内部定义环境变量 也可以显式地在Makefile文件内定义新的环境变量或是覆盖现有的同名环境变量。这可以通过简单的赋值语句完成: ```makefile # 在 Makefile 中定义一个新的环境变量 MYLIBPATH 或者覆盖旧有的 MYLIBPATH 变量 MYLIBPATH=/usr/local/mylib all: echo $(MYLIBPATH) ``` 需要注意的是,若是在命令行传递给`make`程序相同名称的变量,则后者将会优先于Makefile内的定义生效[^4]。 #### 导出环境变量供子进程中使用 为了使某个特定的Makefile变量成为真正的操作系统级别的环境变量(即让其作用范围扩展到由当前Make实例启动的所有子进程),应当使用`.EXPORT_ALL_VARIABLES:`特殊目标或者是单独针对单个变量应用`export`关键字: ```makefile # 将所有变量导出为环境变量 .EXPORT_ALL_VARIABLES: # 或者仅导出选定的一个或多个变量 export MYLIBPATH ``` 一旦执行了这样的配置之后,任何后续创建的子shell都将继承这些设置好的环境变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值