MakeFile笔记
gcc/g++
1 | gcc -E hello.c -o hello.i |
Linux下生成的
.o
目标文件、.so
动态库文件以及下一小节链接阶段生成最终的可执行文件都是elf格式的,
可以使用readelf
工具来查看它们的内容。
1 | readelf -a hello.o |
在Ubuntu下,可以使用 ldd 工具查看动态文件的库依赖
1 | ldd hello |
预定义变量
$* 不包含扩展名的目标文件名称。 指代匹配符 % 匹配的部分, 比如% 匹配 f1.txt 中的f1 ,$* 就表示 f1
$@ 目标的完整名称。
$% 如果目标是归档成员,则该变量表示目标的归档成员名称。
$< 第一个依赖文件的名称。
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。
$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$(@D) 和 $(@F) 分别指向 $@ 的目录名和文件名
1 | VARIABLE = value # 在执行时扩展,允许递归扩展。 |
Makefile注意事项
tab分隔,不能用空格。
每个makefile最好加一个all
注释用“#”符号
文件指示,引用其他的makefile文件