文档章节

强大的Makefile

卢林
 卢林
发布于 2016/09/25 22:04
字数 328
阅读 9
收藏 0

一、make 规则

Target: Dependencies
	<TAB>Commands

例子:

main.o: main.c common.c common.h
	gcc -c main.c

二、建立 Makefile (这里不带后缀名,并且根据习惯首字母大写)

输入以下内容:

clean: 
	[@echo](https://my.oschina.net/echolee1987) hello
	echo hello

ps: 在终端输入命令:make clean 执行(但是需要在Makefile的同级目录) 如果是在windows环境下,你也可以使用nmake进行测试,但是我相信在windows就不用这种方式了。

  1. clean: 定义执行的make的命令。
  2. @echo: 直接输出“hello”字符串,但是不打印代码。
  3. echo: 输出“hello”字符串,并且打印代码。

执行结果如下:

输入图片说明

三、通过 Makefile 去编译并且执行C语言代码

(1) 首先创建main.c源代码文件,这个不难。

#include <stdio.h>

int main()
{
	printf("-----------\n");
	printf("hello\n");
	printf("-----------\n");
}

(2) 创建我们需要的Makefile文件,内容如下。

targets = main

$(targets): main.c 
	gcc main.c -o main.o
	./main.o

clean:
	rm *.o

ps: 这里出现了新语法:变量定义 变量的声明--> targets = main.o 引用变量--> $(targets) 等价于:

main: main.c 
	gcc main.c -o main.o
	./main.o

clean:
	rm *.o

(3) 执行效果。

输入图片说明

ps: 这里执行了make && make clean(等价于:make main && make clean)

  1. make不带参数,默认执行第一条命令。
  2. &&:左边命令执行成功,就执行右边的命令(和程序中的&&是一样的效果)。

© 著作权归作者所有

共有 人打赏支持
上一篇: CSS字体单位
下一篇: 从触摸开始
卢林
粉丝 29
博文 17
码字总数 30812
作品 0
成都
程序员
私信 提问
浅析通用Makefile

我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件。如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写...

1045917067
2017/11/16
0
0
Linux编译安装中configure、make和make install各自的作用

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。 ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。...

Surjur
2014/11/27
0
0
configure/make/make install的作用

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。 ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC, 并不是需要CC或GCC,它是个shell脚本...

j_m
2012/07/10
0
0
Makefile 简介

Makefile 简介 Linux Story2017-11-271 阅读 GCCMakefileLinux 前言 这篇文章旨在介绍 Makefile 这一强力的工具,对 Makefile 的规则和变量等内容没有做出完整的描述,只是简单进行了一点介绍...

Linux Story
2017/11/27
0
0
用qmake生成Makefile

1.简介:   qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。是qt工具包的一部分.在Unix&linux上写程式的人大概都碰过Makefile。用 make来开发和编译程式的确很方便...

openthings
2015/01/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部