<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介绍的更多相关文章

  1. 跟我一起写Makefile:MakeFile介绍

    makefile 介绍 make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序. 首先,我们用一个示例来说明makefile的书写规则.以便给大家一个感性认识.这 ...

  2. (转)Makefile介绍

    2. Makefile介绍 make命令执行时,需要一个Makefile文件,以告诉make命令需要怎么样的去编译和链接程序. 首先,我们用一个示例来说明Makefile的书写规则.以便给大家一个感性 ...

  3. [转] Makefile 基础 (1) —— Makefile 介绍

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  4. Makefile 介绍

    makefile:是告诉编译器(交叉工具链)如何去编译.链接一个工程的规则.   一.概述 什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为 ...

  5. 第一篇 make与makefile介绍

    我们在Linux系统中学习C语言或者C++语言时,大多数时候只是用gcc命令或者g++命令在命令行进行简单的编译.链接即可得到最终的可执行文件,进一步即可验证所写C/C++语言的正确性.但是,在大型工 ...

  6. GNU Make chapter 2 —— Makefile 介绍

    Makefile是由一系列的rule规则组成,这些rule都遵循以下形式: target ... : prerequisites ... command ... ... target(目标) 一般来说 ...

  7. CFLAGS/CPPFLAGS/CXXFLAGS in Makefile介绍

    先来看一张关于Makefile中的常见预定义变量. CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项.这两个变量实际上涵盖了编译和汇编两个步骤.大多数程序和库 ...

  8. makefile介绍1.0

    1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...

  9. GNU autotools自动生成Makefile 介绍

    一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...

随机推荐

  1. C#超级方便的ExpandoObject类别

    这东西是.NET Framework 4.5 的新东西..发现这个,大概就跟发现新大陆一样的兴奋,让我再次赞叹Anders Hejlsberg 之神.. 这边有MSDN : http://msdn.m ...

  2. 基于视觉反馈的步进电机X-Y平台控制

    关键词:步进电机.XY平台.视觉反馈 用途:工业自动化 文章类型:原理介绍.随笔纪念 @Author:VShawn(singlex@foxmail.com) @Date:2017-05-01 @Lab ...

  3. python全栈开发从入门到放弃之字典的应用

    1.存值 info_dic={'name':'egon','age':18,'sex':'male'} info_dic['job']='IT' #根据key来存值 print(info_dic) 输 ...

  4. NHibernate应用开发

    第一章:NHibernate入门       第一讲:NHibernate架构剖析       第二讲:搭建第一个NHibernate应用程序       第三讲:nhibernate.cfg.xml ...

  5. 微信小程序 使用腾讯地图SDK详解及实现步骤

    信小程序 使用腾讯地图SDK详解及实现步骤    微信小程序JavaScript SDK: 官方文档:http://lbs.qq.com/qqmap_wx_jssdk/index.html 步骤: 1 ...

  6. maven自动化构建deploy

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. html基础 CSS样式表

    CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控制精确, ...

  8. MySQL-5.7 存储过程及函数

    1.语法 CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characte ...

  9. python3爬虫全国地址信息

    PHP方式写的一团糟所以就用python3重写了一遍,所以因为第二次写了,思路也更清晰了些. 提醒:可能会有502的错误,所以做了异常以及数据库事务处理,暂时没有想到更好的优化方法,所以就先这样吧.待 ...

  10. HGVS,非HGVS形式的突变描述解释

    NG_012232.1(NM_004006.1):c.93+1G>T: 在该转录本NM_004006.1外显子的第93个碱基的下1个碱基(属于内含子)G变为T. NG_012232.1(NM_0 ...