11_gcc、makefile极简学习(多文件、多路径)
KeyPoint
预处理
gcc -E file.c -o file.i
处理#号开头的预处理指令,展开宏编译
gcc -S file.i -o file.s
从源文件到汇编文件(高级编程语言->底层编程语言)汇编
gcc -c file.s -o file.o
从汇编文件到二进制程序(人勉强可以读的底层汇编语言->计算机读的二进制程序)链接
gcc file.o -o test
,使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件, 可以用./test
执行生成的结果手动编写完整的gcc, 注意格式要像python一样整齐\dog
# -I ./submodule在这个文件夹找找不到的头文件
test:main.o module.o
gcc main.o module.o -o test -I ./submodule
main.o:main.c
gcc -c main.c -o main.o -I ./submodule# ./submodule/module.c module.c文件在当前目录下的submodule文件夹里
module.o:./submodule/module.c
gcc -c ./submodule/module.c -o module.o# 执行make clean清除编译的结果
clean:rm -f *.o test
带有一点点技巧的gcc
# 增加搜索的%.o的文件夹路径,用:隔开各个文件夹
VPATH = func:log# 生成的目标文件名为test
TAR = test# 增加搜索的头文件路径,每个都要-I开头,./代表当前路径下
INC =-I./log -I./func# 所有要生成的二进制文件
OBJ = main.o func.o log.o$(TAR):$(OBJ)
gcc *.o -o $@ $(INC)
%.o:%.c
gcc -c $< -o $@ $(INC)# 执行make clean清除make的结果
clean:rm -f *.o $(TAR)