make和makefile介绍
<strong>先附上一个比较简单的,测试代码用的Makefile</strong>
</pre><pre code_snippet_id="463854" snippet_file_name="blog_20140904_3_4948303" name="code" class="cpp">.PHONY: all clean CC=gcc
CCFLAGS="-std=gnu99"
RM=rm
RMFLAGS=-fr SRCS=$(wildcard *.c)
OBJS=$(patsubst %.c, %.o, $(SRCS))
EXE=exe all:$(EXE) $(EXE):$(OBJS)
$(CC) $(CCFLAGS) -o $(EXE) $(OBJS) %.o:%.c
$(CC) $(CCFLAGS) -o $@ -c $^ clean:
$(RM) $(RMFLAGS) $(OBJS) *.out
一、make和makefile
make:在必要时重新编译所有受改动影响的源文件。
makefile:告诉make应用程序应该如何构造。
二、make命令
1. make选项和参数
-k: 让make即使发现错误也继续执行,以便于一次性输出所有错误。
-n:输出要执行的操作,不执行
-f:设置makefile文件。默认为makefile,如果该文件不存在则查找Makefile。如果使用GNU Make则优先查找GNUmakefile。
2. 目标
make命令会创建一个特定的目标,可以将该目标作为make的一个参数。如果没有使用该参数,则make将试图创建makefile文件中的第一个目标。
3. 依赖关系
程序目标依赖于.o文件,.o文件依赖于.c和.h文件。
比如一个程序如下所示
/* main.c */
#include "a.h" /* 2.c */
#include "a.h"
#include "b.h" /* 3.c */
#include "b.h"
#include "c.h"
则依赖关系如下所示:
myapp : main.o 2.o 3.o
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o 3.c b.h c.h
如果程序要一次创建多个文件,如要创建可执行文件和用户手册,则可以使用为目标all
all:myapp myapp.help
三、makefile基础语法
1. 宏和注释
注释:make以#开头到行尾表示注释
宏:宏名 = value 表示定义一个宏。引用方法为 $(宏名)或${宏名}。宏的值可以为空
2,一个简单的makefile例子
# makefile中以#开头到行尾表示注释,所以本行是注释 #定义make为目标
all: myapp #宏定义编译器为gcc
CC = gcc myapp: main.o 2.o 3.o
#下一行为make规则,用tab键开头(不能用空格替代)
CC -o myapp main.c 2.o 3.o main.o: main.c a.h
CC -c main.c 2.o: 2.c a.h b.h
CC -c 2.c
3.o: 3.c b.h c.h
gcc -c 3.c
make和makefile介绍的更多相关文章
- 跟我一起写Makefile:MakeFile介绍
makefile 介绍 make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序. 首先,我们用一个示例来说明makefile的书写规则.以便给大家一个感性认识.这 ...
- (转)Makefile介绍
2. Makefile介绍 make命令执行时,需要一个Makefile文件,以告诉make命令需要怎么样的去编译和链接程序. 首先,我们用一个示例来说明Makefile的书写规则.以便给大家一个感性 ...
- [转] Makefile 基础 (1) —— Makefile 介绍
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- Makefile 介绍
makefile:是告诉编译器(交叉工具链)如何去编译.链接一个工程的规则. 一.概述 什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为 ...
- 第一篇 make与makefile介绍
我们在Linux系统中学习C语言或者C++语言时,大多数时候只是用gcc命令或者g++命令在命令行进行简单的编译.链接即可得到最终的可执行文件,进一步即可验证所写C/C++语言的正确性.但是,在大型工 ...
- GNU Make chapter 2 —— Makefile 介绍
Makefile是由一系列的rule规则组成,这些rule都遵循以下形式: target ... : prerequisites ... command ... ... target(目标) 一般来说 ...
- CFLAGS/CPPFLAGS/CXXFLAGS in Makefile介绍
先来看一张关于Makefile中的常见预定义变量. CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项.这两个变量实际上涵盖了编译和汇编两个步骤.大多数程序和库 ...
- makefile介绍1.0
1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...
- GNU autotools自动生成Makefile 介绍
一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...
随机推荐
- C#简单实现动态数据生成Word文档并保存
今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取. 我觉得类似这种的一般用第三方报表来做比较简便.但既然要求了Word,只好硬着头皮来 ...
- C#笔试面试宝典值得收藏
又是一年换工作纠结的季节,前一阵子由于工作的缘故,薪资降低,加之被其他部门以莫须有的罪名投诉:固然愤慨之,遂升起离职念想,下面是这几天电话面试和笔试中常问到的问题汇总,给大家分享下,不足之处往大神拍砖 ...
- MySQL读写分离之amoeba
MySQL读写分离之amoeba主从复制的搭建环境参考:http://www.cnblogs.com/fansik/p/5270334.htmlamoeba依赖于jdk环境:jdk环境搭建参考:htt ...
- Linux的进程/线程通信方式总结(转)
Linux系统中的进程通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通 ...
- 跨平台编译CMake使用
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...
- unity, 在编辑界面中隐藏公开变量
unity默认声明为public的变量都是在编辑界面可见的,如果要隐藏的话就可以这样做 一种是使用属性 Public float Age { get; set; } 另一种是使用标签 [HideInI ...
- hadoop17---RPC和Socket的区别
RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台 ...
- form前台提交List<Object>对象以及后台处理
页面: <form method="post" action="test.do" id="form"> <input ty ...
- Python3.x:pip install pymssql安装时出错
Python3.x:pip install pymssql安装时出错 一.错误日志 error: Microsoft Visual C++ 14.0 is required. Get it with ...
- uvm的sequence
1,每个sequence都有一个body任务.当一个sequence启动后,会自动执行sequence的body任务,所以在sequence的class中,一定要有一个名为body的task. 此外, ...