标签搜索

关于 gcc makefile 使用说明

Toanle
2021-05-24 / 0 评论 / 10 阅读 / 正在检测是否收录...

make工作过程:
0*001
当然使用前你得确保你已经安装了make插件这里我以debian系统为例:

sudo apt install make

make 在当前目录寻找“Makefile”或“makefile”文件。
如果找到,它会找文件中的第一个目标文件(target),如上例它找到“app”这个目标文件,把这个文件作为最终的目标文件。 如果 app 文件不存在,或是 app 所依赖的后面的 .o 文件的文件修改时间要比 app 这个文件新,那么make命令就会执行后面所定义的命令来生成 app 这个文件。
如果app所依赖的.o文件也不存在,那么make命令会在当前文件中寻找目标为.o文件的依赖关系。如果找到,则再根据那一个规则生成 .o 文件,根据.o文件依赖的.c文件和.h文件,执行规则生成.o文件。
然后make再用 .o 文件生成执行文件 app。
make 会一层一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,如最后被依赖的文件找不到,那么 make 就会直接退出并报错。

make 只关注文件的依赖性,例如在找到了依赖关系之后,冒号后面的文件如果不存在就停止工作。所以通过上述分析,像clean 这种没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行。不过,可以显式指定make执行clean,即make clean,在上面的例子中是用来清除所有的目标文件和可执行文件app,以便重新编译。

如果这个工程已被编译过,那么当修改了其中一个源文件,如hello.c,根据我们的依赖性,目标文件 hello.o 会被重新编译,即依赖关系后面的命令,即命令gcc -c hello.c会被执行。此时hello.o文件就是最新的了。hello.o的文件修改时间比 app文件新,所以app会被重新连接。只要修改了与第一个目标文件存在直接或间接依赖关系的文件,都会发生重新编译和重新链接(链接目标文件生成可执行文件)。

CC=gcc
all: mail.c
    $(CC) -o mail mail.c
.PHONY:clean
clean:
    rm -rf *.o 

这里的CC=gcc表示定义编译器使用gcc编译器函数
all 便是执行make时运行的命令一般把它放在第一位
clean 便是清理编译产生的可执行文件
当然你还可以添加自己元素例如:make install

0

评论

博主关闭了当前页面的评论