用makefile编译C文件

来源:互联网 发布:炎黄网络怎么连接 编辑:程序博客网 时间:2024/06/05 08:26

makefile 其实功能挺强大的,这里只是简单谈谈编译C文件的方法。

简单点说,makefile 描述的是目标文件,依赖文件与文件操作命令三部分内容,


目标文件:依赖文件

(一个TAB键)命令语句


一个简单的例子:


main.c

#include<stdio.h>#include<string.h>#include "save.h"int main(){int n=0;while(~scanf("%d",&n)){int len = strlen(str[n]);if(len > 0)printf("%s\n",fun(n));else printf("ERROR!\n");}return 0;}

save.h

#define N 100char str[][N]={"I love you!","What a fucking day!","So What!!!","When and where shall we meet?""Good moening!","Have a good time!","See you."};char * fun(int i){return str[i];}

makefile

NODE 1:

在终端输入:

make

的时候,确省参数即为 main (即 makefile 中的第一个目标文件,就是说相当与输入了:make main);

如果想要执行 clean 操作,需要给 make 命令参数,在终端输入:

make clean


NODE 2:

依赖文件如果和目标文件不在同一个目录,需要加地址,比如:

gcc -c main.c -I /home/administrator/ $^


# $@ -- 目标文件,$^ -- 所有依赖文件# main 即为可执行文件# *.c (用 -c 生成,-c是只编译,不链接,默认GCC/G++是编译链接) *.o(目标文件(二进制)) ,-o 命令可以给可执行文件命名main: main.ogcc -o $@ $^### gcc -o main main.omain.o: main.c save.hgcc -c main.c save.hclean: rm main.o main


这里多说一点,如果你嫌每次都敲个 makefile 麻烦的话,可以考虑下用字符替换,把原有的 makefile 中的关键字,也就是文件名替换成新的,即将要编译的文件名(当然不是所有情况下都能这么做),比如,现在我们新建了一个文件 Rank.c ,需要编译,然后,它的编译条件和 main.c 的一样,那么调用 sed 命令,把 main 替换成 Rank 就行了:

sed -i 's/main/Rank/g' makefile

sed命令具体讲解可以去搜下,很多,这里就不说了