博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单makefile的写法
阅读量:5269 次
发布时间:2019-06-14

本文共 1696 字,大约阅读时间需要 5 分钟。

一个项目下的文件比较多,如果单个的输入,比较费劲,所以就需要把编译过程写进一个MakeFile文件中。

下面建立5个文件,3个cxx文件,2个hxx头文件

//filename main.cxx#include
#include"printf1.hxx"#include"printf2.hxx"using namespace std;int main(void){ cout<<"Hello World!"<
//filename printf1.cxx#include "printf1.hxx"#include 
using namespace std;void printf1(){ cout<<"Printf1"<
//filename printf2.cxx#include "printf2.hxx"#include 
using namespace std;void printf2(){ cout<<"Printf2"<
//filename printf1.hxx#ifndef _PRINTF_1_H_#define _PRINTF_1_H_void printf1();#endif
//filename printf2.hxx#ifndef _PRINTF_2_H_#define _PRINTF_2_H_void printf2();#endif

 makefile的内容:

cc=g++exe=mainobj=main.o printf1.o printf2.o$(exe):$(obj)	$(cc) -o $(exe) $(obj)main.o:main.cxx	$(cc) -c main.cxxprintf1.o:printf1.cxx	$(cc) -c printf1.cxxprintf2.o:printf2.cxx	$(cc) -c printf2.cxx .PHONY : cleanclean:	rm -rf *.o main

其中 cc=g++

          exe=main

         obj=main.oprintf1.o printf2.o

为变量的定义,$(...)作为引用,可以分析一下,是不是和上文中单个操作效果一样?

执行过程:

$ make

g++ -c main.cxx

g++ -c printf1.cxx

g++ -c printf2.cxx

g++ -o main main.o printf1.o printf2.o

下面我们来看一下makefile的规则:

target...:prerequisites...

comand

...

...

target是目标文件,可以是Object File 也可以是执行文件,也可以是一个标签(Lable)。

prerequisites是要生成target文件所需的文件或目标。

command 就是make需要执行的命令了。

 

这是一个文件的依赖关系,也就是说,target 这一个或多个的目标文件依赖于 prerequisites 中的文件,这种方法,也就是 make 的“隐晦规则”。其生成规则定义在 command 中。

说白一点就是说, prerequisites 中如果有一个以上的文件比 target 文件要新的话,command 所定义的命令就会被执行。

这就是 Makefile 的规则。也就是 Makefile 中最核心的内容。

 

.PHONY 意思表示 clean 是一个“伪目标”。而在 rm 命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。

当然,clean 的规则不要放在文件的开头,不然,这就会变成 make 的默认目标,相信谁也不愿意这样。

不成文的规矩是——“clean 从来都是放在文件的最后”。

 

 

 

  

  

转载于:https://www.cnblogs.com/hhboboy/p/4892463.html

你可能感兴趣的文章
json例子--bai
查看>>
不同版本的eclipse安装svn时url大全
查看>>
PSP
查看>>
CentOS6.4 编译安装Python 3.3.2 - CRPER木木
查看>>
高效率的幂运算
查看>>
mac电脑批量解压android apk文件图形化工具--apkDecode
查看>>
Android UI 之实现多级列表TreeView
查看>>
Ubuntu 14.04避雷系列:升级python到最新2.x版本
查看>>
小狗电器CEO檀冲:一味的推新要有创新来支持
查看>>
关于scrollLeft的获取在不同浏览器或相同浏览器的不同版本下的获取
查看>>
mk_clock
查看>>
Kafka与.net core(二)zookeeper
查看>>
Linux TTY驱动的一些问题
查看>>
在Linux下使用Android adb
查看>>
java基础77 Http协议及Servlet中的GET、POST提交方式
查看>>
第四届蓝桥杯c/c++B组4
查看>>
phpstorm 7.1 注册码
查看>>
图文详解AO打印(端桥模式)(转)
查看>>
HTML
查看>>
在Silverlight中使用SESSION
查看>>