Makefile&gcc


gcc

gcc [-option] [filename1] [filename2] [filename3] <输出o文件名不加后缀>

将 1 2 3 一起编译处o文件

-c: 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
-o: <输出文件名>用来指定编译结束以后的输出文件名,如果使用这个选项的话 GCC 默
认编译出来的可执行文件名字为 a.out。
-g: 添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编
译的时候生成调试所需的符号信息。
-O: 对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进
行优化,这样产生的可执行文件执行效率就高。
-O2: 比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。

makefile文件

命令列表中的每条命令必须以 TAB 键开始 
main: main.o input.o calcu.o
    gcc -o main main.o input.o calcu.o 
main.o: main.c
    gcc -c main.c 
input.o: input.c
    gcc -c input.c 
calcu.o: calcu.c
    gcc -c calcu.c
clean:
    rm *.o
    rm main

make 命令在执行这个 Makefile 的时候其执行步骤如下:
首先更新第一条规则中的 main,第一条规则的目标成为默认目标,只要默认目标更新了那
么就认为 Makefile 的工作,完成了整个 Makefile 就是为了完成这个工作。在第一次编译的时候
由于 main 还不存在,因此第一条规则会执行,第一条规则依赖于文件 main.o、 input.o 和 calcu.o
这个三个.o 文件,这三个.o 文件目前还都没有,因此必须先更新这三个文件。 make 会查找以这
三个.o 文件为目标的规则并执行。以 main.o 为例,发现更新 main.o 的是第二条规则,因此会执
行第二条规则,第二条规则里面的命令为“gcc –c main.c”, 这行命令很熟悉了吧,就是不链接
编译 main.c,生成 main.o,其它两个.o 文件同理。最后一个规则目标是 clean,它没有依赖文件,
因此会默认为依赖文件都是最新的,所以其对应的命令不会执行,当我们想要执行 clean 的话
可以直接使用命令“make clean”,执行以后就会删除当前目录下所有的.o 文件以及 main,因此
clean 的功能就是完成工程的清理

posted @ 2021-12-23 15:25  月的光景  阅读(55)  评论(0编辑  收藏  举报