最简单的示例:
test:test.o listen_sock.o
gcc -o test test.o listen_sock.o
test.o:test.c listen_sock.h
gcc -c test.c
listen_sock.o:listen_sock.c listen_sock.h
gcc -c listen_sock.c
1.每一个 *.c文件都可以对应一个*.o文件
2.test.o:test.c listen_sock.h中test.c可以不写,默认对照test.o文件
3. gcc -c test.c可以不写
补充内容:
gcc -MM test.c 输出 test.o: test.c listen_sock.h
make 的参数有很多, 可以通过 make -h 去查看, 下面只介绍几个我认为比较有用的.
参数 | 含义 |
--debug[=<options>] | 输出make的调试信息, options 可以是 a, b, v |
-j --jobs | 同时运行的命令的个数, 也就是多线程执行 Makefile |
-r --no-builtin-rules | 禁止使用任何隐含规则 |
-R --no-builtin-variabes | 禁止使用任何作用于变量上的隐含规则 |
-B --always-make | 假设所有目标都有更新, 即强制重编译 |
变量名 | 含义 |
ARFLAGS | AR命令的参数 |
CFLAGS | C语言编译器的参数 |
CXXFLAGS | C++语言编译器的参数 |
自动变量 | 含义 |
$@ | 目标集合 |
$% | 当目标是函数库文件时, 表示其中的目标文件名 |
$< | 第一个依赖目标. 如果依赖目标是多个, 逐个表示依赖目标 |
$? | 比目标新的依赖目标的集合 |
$^ | 所有依赖目标的集合, 会去除重复的依赖目标 |
$+ | 所有依赖目标的集合, 不会去除重复的依赖目标 |
$* | 这个是GNU make特有的, 其它的make不一定支持 |
$(patsubst %.cpp,%.o ,$(src_files))将src_file中的.cpp文件替换为.o文件