注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小可尼の博客

Linux后端的技术窝窝

 
 
 

日志

 
 

初识Makefile  

2013-12-26 16:14:51|  分类: Makefile的编写 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

出处:http://blog.csdn.net/qq575787460/article/details/8778467

 

三个文件,hello.h  hello.cpp  main.cpp

hello.h


[cpp] view plaincopyprint?
#ifndef MAKE_FILE_OO1   
#define MAKE_FILE_001   
  
void printHello();  
  
#endif  

#ifndef MAKE_FILE_OO1
#define MAKE_FILE_001

void printHello();

#endif


hello.cpp


[cpp] view plaincopyprint?
#include <iostream>   
#include "hello.h"   
using namespace std;  
  
void printHello()  
{  
    cout<<"Hello Makefile!"<<endl;  
}  

#include <iostream>
#include "hello.h"
using namespace std;

void printHello()
{
	cout<<"Hello Makefile!"<<endl;
}


main.cpp


[cpp] view plaincopyprint?
#include "hello.h"   
  
int main()  
{  
    printHello();  
    return 0;  
}  

#include "hello.h"

int main()
{
	printHello();
	return 0;
}

程序很简单,就是输出Hello Makefile!

下面是Makefile:


[cpp] view plaincopyprint?
main:main.o hello.o  
    g++ -o main main.o hello.o  
main.o:main.cpp hello.h  
    g++ -c -o main.o main.cpp  
hello.o:hello.cpp hello.h  
    g++ -c -o hello.o hello.cpp  

main:main.o hello.o
	g++ -o main main.o hello.o
main.o:main.cpp hello.h
	g++ -c -o main.o main.cpp
hello.o:hello.cpp hello.h
	g++ -c -o hello.o hello.cpp

终端执行make,make会自动在本目录内寻找一个名字为Makefile或makefile的文件,并执行。执行后会发现目录内多了三个文件,分别是hello.o main.o main,main就是可执行程序,终端输入./main即可执行。

上面的Makefile中定义了3条规则,第1行和第2行是一条,第3和4行是一条,第5行和第6行是一条。

以规则


[plain] view plaincopyprint?
main:main.o hello.o  
    g++ -o main main.o hello.o  

main:main.o hello.o
	g++ -o main main.o hello.o

为例进行说明。

main是目标文件,冒号后面的main.o hello.o是依赖的文件

g++ -o main main.o hello.o说明如何用依赖文件生成目标文件。注意:每一行的编译命令必须以TAB键开头


同理:


[plain] view plaincopyprint?
main.o:main.cpp hello.h  
    g++ -c -o main.o main.cpp  

main.o:main.cpp hello.h
	g++ -c -o main.o main.cpp

main.o是目标文件,main.cpp hello.h是依赖的文件


所以,可以知道,这个Makefile一共定义了三个目标文件main,main.o,hello.o。

第一个目标为最终目标,也就是最终要生成的文件。生成其余的目标(main.o hello.o)都是为了生成最终目标(main)服务。


另外,可以看到生成main.o和hello.o时,编译选项中有个-c,它的意思是只编译不链接。举例来说,在编译main.o时,用到了函数printHello,但是这个函数在hello.o(hello.cpp)中导出,如果不适用-c选项,那么main.cpp编译为main.o后将会寻找函数printHello()的实体进行链接,但是我们并没有制定hello.o,所以将会出错。一般在编译单个obj模块的时候,都要加上-c选项。

  评论这张
 
阅读(133)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018