使用GCC的命令行进行程序编译在单个文件下是比较方便的,当工程中的文件逐渐增多,甚至变得十分庞大的时候,使用GCC命令编译就会变得力不从心。Linux中的make工具提供了一种管理工程的功能,可以方便地进行程序的编译,对更新的文件进行重新编译。
一.一个多文件的工程例子
工程代码分别存放在add/add_int.c,add/add_float.c,add/add.h,sub/sub_int.c,sub/sub_float.c,sub/sub.h,main.c中。
二.多文件工程的编译
多文件工程编译成可执行文件有两种方法,一种是命令行操作,手动输入将源文件编译成可执行文件;另一种是编写Makefile文件,通过make命令将多个文件编译成可执行文件。
1.命令行编译程序
将此文件编译成可执行文件cacu,如果用gcc进行手动编译是比较麻烦的。例如,下面的编译方式每行编译一个C文件,生成目标文件,最后将5个目标编译成可执行的文件。
$gcc -c add/add_int.c -o add/add_int.o (生成add_int.o目标函数)
$gcc -c add/add_float.c -o add/add_float.o (生成add_float.o目标函数)
$gcc -c sub/sub_int.c -o sub/sub_int.o (生成sub_int.o目标函数)
$gcc -c sub/sub_float.c -o sub/sub_float.o (生成sub_float.o目标函数)
$gcc -c main.c -o main.o (生成main.o目标函数)
$gcc -o cacu add/add_int.o add/add_float.o sub/sub_int.o sub/sub_float.o main.o (链接生成cacu)
或者使用gcc的默认规则,使用一条命令可直接生成可执行文件cacu:
$gcc -o cacu add/add_int.c add/add_float.c sub/sub_int.c sub/sub_float.c main.c
2.多文件的Makefile
3.多文件的编译
三.Makefile的规则
1.规则的书写
2.目标
3.依赖项
4.规则的嵌套
5.文件的时间戳
6.执行的规则
7.模式匹配
四.Makefile中使用变量
五.搜索路径
六.递归make
1.递归调用的方式
2.总控Makefile
3.子目录Makfile的编写
七.Makefile中的函数