cygwin + gcc+makeFile入门(一): Mafile的基本指令

 别指望这篇文章帮你搭建Cygwin的环境。 因为说这个的太多。这篇文章的环境是Cygwin的开发环境。

 

这篇文章将指引如何写MakeFile, 以及Gcc编译的几个常用开关:

 

 

MakeFile的思想:提供一个细分的方法,把一个总目标让你细化成小目标, 小目标执行完之后,总目标最后再执行。

MakeFile的基本格式:

 

 

举例有一个如下的MakeFile文件:

 

目标生成一个exe文件, 但生成该exe文件需要编译三个源文件:a, b, c。 在上述MakeFile文件中,把编译这三个源文件

的任务分解成a_target, b_target, c_target,  分别实现之后,才最终到allTarget这个最终目标上来。

 

源文件a.ccp, b.cpp, c.cpp是这样的关系:

a.cpp是Main函数所在的源文件,需要调用b.cpp的functionB();

b.cpp中的functionB需要调用c.cpp中的函数functionC();

 

当然编译并不需要从c到a这样编译, 因为编译的时候只需要找到声明文件就通过。所以,目标a_target, b_target, c_target

实质上是并列关系。

 

.h文件不需要作为目标, 因为gcc自动查找。

 

gcc的编译开关-c表示编译完之后,不再汇编和link【我们习惯的不带任何参数的gcc指令把什么问题都全做了,当然做之前,要判断先后顺序,这会花掉不少时间】

 

这里提倡的是: gcc -c 编译成.o 文件,然后用gcc 不带开关的选项将.o编译成.exe文件,

 

这里就两个gcc指令,容易吧!

 

OK, that‘s ALL

 

源代码下载地址:http://download.csdn.net/source/1823622

 

再补充一点进阶的知识:

 

上面的方式, 并非很实用,原因是,每次make的时候,文件都会编译,连接, 但实际情况是:我只想当文件改变的时候,才去编译和连接,怎么做到这一点?

 

makefile帮我们做到了,那就是,所有的目标,及其依赖目标,都以文件的形式组织,如,我们的目标是c_target将改名为c.o目标,它依赖c.cpp, c.h, c.o 发生了变化,则执行目标的命令,否则不执行。

 

所以,选择性的编译,得到了很好的贯彻,具体如下:

 

bTarget:
 gcc -c b.cpp -o b.o

任何时候都要执行编译指令


b.o:
 gcc -c b.cpp -o b.o
 
表示: 当b.o文件存在的时候, 不执行编译指令, 不存在b.o文件时,才编译


c.o: c.cpp w.cpp
 gcc -c c.cpp -o c.o

表示当c.cpp出现更新, 或者w.cpp出现更新,或者b.o存在三者之一成立,则编译. 反之不编译


所以,拿文件当条件的好处彻底体现

 

另外需要注意的是,cc 可以代替gcc

 

 推荐阅读:GNU+make中文手册 , 到CSDN上面去搜索就有

 

makeFile中增加include路径:

 

项目为了便于管理,不同类别的头文件放到不同目录,因此需要指明这些不同路径,方便在Include的时候,将这些文件引入进来。

 

方法: -I."PathName", 比如源文件所在的文件夹下,有一个include文件夹需要引入,则采用:

 

-I./include即可, "./"表示当前路径; "../"表示上级路径

 

 

 

参考资料:


Linux 常用的Makefile模板

 

 

延伸阅读:

 

向大家推荐一个C/C++通用Makefile

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值