【Linux开发技术之程序构建】Makefile学习(不断更新)

 作者:gnuhpc 
出处:http://www.cnblogs.com/gnuhpc/ 
  

1.入门篇

1)Makefile的作用:帮助编译多文件。

2)基本编写示例:以如下四个文件为例

//main.c

#include"mytool1.h"
#include"mytool2.h"
int main(int argc,char **argv)
{
mytool1_print("hello");
mytool2_print("hello");
}

//mytool1.h
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif

//mytool1.c
#include"mytool1.h"
void mytool1_print(char *print_str)
{
printf("This is mytool1 print %s",print_str);
}

//mytool2.h
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif

//mytool2.c
#include"mytool2.h"
void mytool2_print(char *print_str)
{
printf("This is mytool2 print %s",print_str);
} 

对应进行编译构建的Makefile为

main:main.o mytool1.o mytool2.o

	gcc -o main main.o mytool1.o mytool2.o

main.o:main.c mytool1.h mytool2.h

	gcc -c main.c

mytool1.o:mytool1.c mytool1.h

	gcc -c mytool1.c

mytool2.o:mytool2.c mytool2.h

	gcc -c mytool2.c

 

 

Makefile 的本质是参与构建的源代码之间依赖关系和编译方法进行说明。一般采用的格式如下:

target: components
TAB rule

第一行表示的是依赖关系.  第二行是规则,使用TAB 键进行

main:main.o mytool1.o mytool2.o 就是所谓的依赖关系,实际上是一种庖丁解牛的方式,建议在纸上画好关系依赖图,如本例:

main
---main.o--(main.c,mytool1.h,mytool2.h)
|
mytool2.o--(mytool2.c,mytool2.h)
|
mytool1.o--(mytool1.c,mytool1.h)

而gcc -o main main.o mytool1.o mytool2.o 就是所谓的规则。

3)简化

$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件,使用替代规则可以简写上例如下:

main:main.o mytool1.o mytool2.o
	gcc -o $@ $^

main.o:main.c mytool1.h mytool2.h
	gcc -c $<

mytool1.o:mytool1.cmytool1.h
	gcc -c $<

mytool2.o:mytool2.cmytool2.h
	gcc -c $<

如果有规律的命名规则,则可以简写上例如下:

main:main.o mytool1.o mytool2.o
	gcc -o $@ $^
..c.o:
	gcc -c $<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值