makefile常用语法讲解(1)

From: http://www.cnblogs.com/mydomain/archive/2011/08/12/2136083.html

1、make是一个解释makefile中指令的命令工具。Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。

Makefile 里主要包含了五种类型的语句/行:显式规则、隐式规则、变量定义、文件指示和注释。

make命令格式:make [-f Makefile] [option] [target] 

2、编译和链接规则

1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。

2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。

3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

3、makefile的构成

(1)需要由make工具创建的目标体(target),通常是目标文件或可执行文件

(2)要创建的目标体所依赖的文件(dependency_file)。

(3)创建每个目标体时需要运行的命令(command)。

格式如下:

target:dependency_files

<TAB>command

在这里面,变量一般都是字符串,他有点像c语言的宏。

makefile中的文件指示,包含3部分,一个是在一个Makefie中引用另一个Makefile,就像c语言的include一样;另一个是根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。

注释:注释符用"#",可以用反斜框进行转义,如输入注释,“\#”。

4、makefile的书写

1)所有文件都在一个目录中

示例

st_work : main.o  st_work.o  fun.o

gcc  main.o  st_work.o  fun.o  -o  st_work main (命令以Tab开头)

st_work.o : st_work.c

gcc  -c st_work.c  -o st_work

main.o : main.c  st_work.h

gcc -c main.c -o  main.o

fun.o : fun.c fun.h

gcc -c  fun.c -o fun.o

clean:

rm -f st_work *.o

2)多目录的写法

我们这里,在工作目录下有4个文件夹  分别是 sources(源文件) obj (中间文件)headers(头文件) bin(目标文件)

sources里面有 main.c  st_work.c fun.c

obj 里面最初没有文件

headers 里面有 fun.h st_work.h

最终目标取名为 st_work,它应存放到bin里面

预备知识:

gcc 的3个参数:

1. -o 指定目标文件

gcc sources/main.c -o bin/main

2. -c 编译的时候只生产目标文件不链接

gcc -c sources/main.c -o obj/main.o

3. -I 主要指定头文件的搜索路径

gcc -I headers -c main.c -o main.o

4. -l 指定静态库

gcc -lpthread ...

示例

bin/st_work : obj/main.o  obj/st_work.o  obj/fun.o  

   gcc  obj/main.o obj/st_work.o  obj/fun.o  -o bin/st_work  (命令以Tab开头)

obj/st_work.o : sources/st_work.c

gcc  -I  headers -c sources/st_work.c  -o  obj/st_work.o

obj/main.o : sources/main.c

gcc  -I  headers -c sources/main.c    -o  obj/main.o

obj/fun.o  : sources/fun.c

gcc  -I  headers -c sources/fun.c     -o  obj/fun.o

clean:

rm -f bin/st_work obj/*.o

3)隐式规则的引入

    3个预定义变量介绍:

1.  $@     表示要生成的目标

2.  $^     表示全部的依赖文件

3.  $<     表示第一个依赖文件

bin/st_work : obj/main.o  obj/st_work.o  obj/fun.o  

gcc  $^  -o $@  (命令一定要用以Tab开头)

obj/st_work.o : sources/st_work.c

gcc  -I  headers   -c $< -o  $@

obj/main.o : sources/main.c

gcc  -I  headers   -c $< -o  $@

obj/fun.o  : sources/fun.c

gcc  -I  headers   -c $< -o  $@

clean:

rm -f bin/st_work obj/*.o

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5如何控制暂停播放停止

本篇教程探讨了HTML5如何控制暂停播放停止&#xff0c;希望阅读本篇文章以后大家有所收获&#xff0c;帮助大家HTML5CSS3从入门到精通 。 <!DOCTYPE HTML> <html> <head> <meta charset"utf-8"> <meta name"viewport" content…

Oracle 高水位(HWM: High Water Mark) 说明

一. 准备知识&#xff1a;ORACLE的逻辑存储管理. ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行. 每一个B…

React开发(153):ant design自定义列

<Row gutter{12}><Col span{12}><Form.Item label"省/市/区"><CascaderfieldNames{fieldNames}options{options}onChange{() > {this.onChange();}}placeholder"请输入"/></Form.Item></Col>

[转]那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable

1、首先看一个简单的例子 int[] myArray { 1, 32, 43, 343 };IEnumerator myie myArray.GetEnumerator();myie.Reset();while (myie.MoveNext()){int i (int)myie.Current;Console.WriteLine("Value: {0}", i);} 相信很多人都不会像上面这样去遍历myArray这个数组…

makefile常用讲解(2)

From: http://www.cnblogs.com/mydomain/archive/2011/08/12/2136085.html 4&#xff09;变量的引入 变量的引入和应用&#xff1a; CCgcc HD-I headers SC-c $< OBJ-o $ bin/st_work : obj/main.o obj/st_work.o obj/fun.o gcc $^ -o $ (命令一定要用以Tab…

router-link

组件的属性有&#xff1a; to 、replace、 append、 tag、 active-class、 exact 、 event、 exact-active-class to&#xff08;必选参数&#xff09;&#xff1a;类型string/location 表示目标路由的链接&#xff0c;该值可以是一个字符串&#xff0c;也可以是动态绑定的描…

Qt编程'hello world

#include<QApplication>#include<QLabel>int main(int argc,char*argv[]){QApplicatin app(argc,argv);QLabel *label("hello");label->show();return app.exec()} 编译运行&#xff1a; qmake -project 生成 .pro文件qmake 生成 makemake执行 转载于…

电子工程师必上的十大专业网站

这是很久以前看过的帖子&#xff0c;感觉非常不错&#xff0c;今天特地找出来&#xff0c;便于自己以后经常翻阅&#xff01;&#xff01;今天再看这篇文章&#xff0c;发现很多网站自己还是没有账号&#xff0c;原来自己还是非常的不进取啊。来源&#xff1a;hi.baidu.com 作者…

Makefile文件编写规则

From: http://aviva.iteye.com/blog/807494 Makefile中包含五种内容&#xff1a;显式规则&#xff0c;隐式规则&#xff0c;变量定义&#xff0c;指令&#xff08;directive&#xff09;和注释。 1.显式规则――描述如何生成规则的目标&#xff0c;它列出了目标依赖的文件&…

vue使用better-scroll实现下拉刷新、上拉加载

本文目的是为了实现列表的下拉刷新、上拉加载&#xff0c;所以选择了better-scroll这个库。 用好这个库&#xff0c;需要理解下面说明 必须包含两个大的div&#xff0c;外层和内层div 外层div设置可视的大小(宽或者高)-有限制宽或高 内层div&#xff0c;包裹整个可以滚动的部分…

OpenCV学习 4:摄像头视频读写与边缘检测

原创文章&#xff0c;欢迎转载&#xff0c;转载请注明出处 想实现人脸识别&#xff0c;车辆识别&#xff0c;车牌识别。一般我们可不是读硬盘里面的视频文件的&#xff0c;都是直接从摄像头读取视频流然后直接识别的。所以读取摄像头的视频流这是基础。。。OpenCV对读取摄像头的…

Linux中自带正则表达式应用举例

环境&#xff1a;Fedora12, C程序&#xff1a; #include <stdio.h> #include <string.h> #include <sys/types.h> #include <regex.h>// 提取子串 char* getsubstr(char *s, regmatch_t *pmatch) {static char buf[100] {0};memset(buf, 0, sizeof(b…

ISAPI_Rewrite 规则说明

I (ignore case&#xff09;不管大小写强行指定字符匹配例&#xff1a;RewriteRule /code/project/([0-9,a-z]*).html /soft.jsp\?softpy$1 [I]其他的参数一览I (ignore case&#xff09;不管大小写强行指定字符匹配&#xff0c;这个FLAG影响RewriteRule指令和相应的RewriteCo…

H5页面唤起指定app或跳转到应用市场

场景1&#xff1a; 在 h5 页面上&#xff0c;不管用户是否安装过该app&#xff0c;都直接跳转到应用市场&#xff0c;让用户从应用市场上打开app。 思路&#xff1a; 这种场景处理比较简单&#xff0c;直接判断判断是android端还是ios端&#xff0c;然后在点击按钮上赋值对应…

MyBatis.Net 学习手记

MyBatis.NET的前身为IBatis&#xff0c;是JAVA版MyBatis在.NET平台上的翻版&#xff0c;相对NHibernate、EntityFramework等重量级ORM框架而言&#xff0c;MyBatis.NET必须由开发人员手动写SQL&#xff0c;相对灵活性更大&#xff0c;更容易保证DB访问的性能&#xff0c;适用开…

Python 使用 UTF-8 编码

From: http://blog.chenlb.com/2010/01/python-use-utf-8.html 一般我喜欢用 utf-8 编码&#xff0c;在 python 怎么使用呢&#xff1f; 1、在 python 源码文件中用 utf-8 文字。一般会报错&#xff0c;如下&#xff1a; File "F:\workspace\psh\src\test.py", line …

curl下载文件的命令

curl文件下载 curl将下载文件输出到stdout&#xff0c;将进度信息输出到stderr&#xff0c;不显示进度信息使用–silent 选项。1 . curl URL --silent 这条命令是将下载文件输出到终端&#xff0c;所有下载的数据都被写入到stdout。2 . curl URL --silent -O 使用选项 -O 将下载…