gcc -c src/main.c

  • Makefile的规则

target … : prerequisites …
command

  • gcc

gcc -o hello hello.c -I /home/hello/include-L /home/hello/lib –lworld
I目录作为第一个寻找头文件的目录,
L表示将/home/hello/lib目录作为第一个寻找库文件的目录,
gcc -lm 的选项,C代码调用math.h中的函数有问题,如sqrt函数。若如sqrt(3.0)则可以编译通过并运行正常,若如sqrt(n),这里n是定义好的double型变量,则不能编译通过,错误信息为:undefined reference to ‘sqrt’。
-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找.

-o 输出可执行文件
-c 编译生成目标文件
-g 输出调试信息
-O2 编译器优化级别 1-3
-Wall 警告选项 输出警告信息
-l 紧接着链接库 lpthread
-L 指定链接库的路径
-I 头文件路径
-shared 编译成动态链接库

注意-c只是生成目标文件,而-o直接回生成可执行文件

.c.o:
这句话的意思就是 %.o : %.c
也就是说,所有的.o文件,依赖于对应的.c文件
src=$(wildcard .c ./sub/.c)

dir=$(notdir $(src))

obj=(patsubst(patsubst %.c,%.o,(patsubst(dir) )

wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。
notdir把展开的文件去除掉路径信息
patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o

收藏 打印