文章目录
- makefile里面的变量使用
makefile里面的变量使用
calc:add.o sub.o multi.o gcc add.o sub.o multi.o calc.cpp -o calc add.o:add.cpp gcc -c add.cpp -o add.o sub.o:sub.cpp gcc -c sub.cpp -o sub.o multi.o:multi.cpp gcc -c multi.cpp -o multi.o clean: rm -rf *.o calc
执行,可以看到可以正常编译我们的源代码文件成为可执行文件
我们换一种写法
自定义变量
OBJ=add.o sub.o multi.o calc.o TARGET=calc $(TARGET):$(OBJ) gcc $(OBJ) -o $(TARGET) add.o:add.cpp gcc -c add.cpp -o add.o sub.o:sub.cpp gcc -c sub.cpp -o sub.o multi.o:multi.cpp gcc -c multi.cpp -o multi.o calc.o:calc.cpp gcc -c calc.cpp -o calc.o clean: rm -rf *.o calc
执行一下,也是可以的,这也是一种写法
系统变量
?
不包括扩展名的目标文件名称
*不包括扩展名的目标文件名称
?不包括扩展名的目标文件名称+ 所有的依赖文件,以空格分隔
$<表示规则中的第一个条件
$?所有时间戳比目标文件晚的依赖文件,以空格分隔
$@ 目标文件的完整名称
所
有不重复的依赖文件,以空格分隔
^所有不重复的依赖文件,以空格分隔
所有不重复的依赖文件,以空格分隔% 如果目标是归档成员,则该变量表示目标的归档成员名称
OBJ=add.o sub.o multi.o calc.o TARGET=calc $(TARGET):$(OBJ) gcc $(OBJ) -o $(TARGET) add.o:add.cpp gcc -c $^ -o $@ sub.o:sub.cpp gcc -c $^ -o $@ multi.o:multi.cpp gcc -c $^ -o $@ calc.o:calc.cpp gcc -c $^ -o $@ clean: rm -rf *.o $(TARGET)
执行一下
系统常量(可用 make -p 查看)
AS汇编程序的名称, 默认为 as
CC C编译器名称 默认 cc
CPP C预编译器名称 默认 cc -E
CXX C++ 编译器名称 默认 g++
RM文件删除程序别名 默认 rm -f
OBJ=add.o sub.o multi.o calc.o TARGET=calc $(TARGET):$(OBJ) $(CXX) $(OBJ) -o $(TARGET) add.o:add.cpp $(CXX) -c $^ -o $@ sub.o:sub.cpp $(CXX) -c $^ -o $@ multi.o:multi.cpp $(CXX) -c $^ -o $@ calc.o:calc.cpp $(CXX) -c $^ -o $@ clean: $(RM) *.o $(TARGET) show: echo $(AS) echo $(CC) echo $(CPP) echo $(CXX) echo $(RM)
也是可以正常输出
M) *.o $(TARGET)
show:
echo $(AS)
echo $(CC)
echo $(CPP)
echo $(CXX)
echo $(RM)
也是可以正常输出