文章目录
- makefile里面的变量使用
makefile里面的变量使用
calc:add.o sub.o multi.ogcc add.o sub.o multi.o calc.cpp -o calcadd.o:add.cppgcc -c add.cpp -o add.osub.o:sub.cppgcc -c sub.cpp -o sub.omulti.o:multi.cppgcc -c multi.cpp -o multi.oclean:rm -rf *.o calc
执行,可以看到可以正常编译我们的源代码文件成为可执行文件
我们换一种写法
自定义变量
OBJ=add.o sub.o multi.o calc.o
TARGET=calc$(TARGET):$(OBJ)gcc $(OBJ) -o $(TARGET)add.o:add.cppgcc -c add.cpp -o add.osub.o:sub.cppgcc -c sub.cpp -o sub.omulti.o:multi.cppgcc -c multi.cpp -o multi.ocalc.o:calc.cppgcc -c calc.cpp -o calc.oclean:rm -rf *.o calc
执行一下,也是可以的,这也是一种写法
系统变量
∗ 不包括扩展名的目标文件名称 *不包括扩展名的目标文件名称 ∗不包括扩展名的目标文件名称+ 所有的依赖文件,以空格分隔
$<表示规则中的第一个条件
$?所有时间戳比目标文件晚的依赖文件,以空格分隔
$@ 目标文件的完整名称
所 有不重复的依赖文件,以空格分隔 ^所有不重复的依赖文件,以空格分隔 所有不重复的依赖文件,以空格分隔% 如果目标是归档成员,则该变量表示目标的归档成员名称
OBJ=add.o sub.o multi.o calc.o
TARGET=calc$(TARGET):$(OBJ)gcc $(OBJ) -o $(TARGET)add.o:add.cppgcc -c $^ -o $@sub.o:sub.cppgcc -c $^ -o $@multi.o:multi.cppgcc -c $^ -o $@calc.o:calc.cppgcc -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)
也是可以正常输出