用makefile编译C文件

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 100

char 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.o
	gcc -o $@ $^	### gcc -o main main.o
main.o: main.c save.h
	gcc -c main.c save.h

clean: 
	rm main.o main


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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值