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)
也是可以正常输出