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