复杂实例

#演示样例1:在上一个演示样例的基础上再添加一个可运行文件03test[改动之处已标红]

.PHONY: clean all

CC = gcc

CFLAGS = -Wall -g

BIN = 01test 02test 03test

SOURCES = $(BIN:=.c)

OBJECTS = $(BIN:=.o)

all: $(BIN)

01test: 01test.o

02test: 02test.o

03test: 03test.o

.c.o:

$(CC) $(CFLAGS) -c $< -o $@

clean:

-rm -rf $(BIN) $(OBJECTS)

#演示样例2:在演示样例1上为03test加入一个自编的头文件pub.h[改动之处已标红]

.PHONY: clean all

CC = gcc

CFLAGS = -Wall -g

BIN = 01test 02test 03test

SOURCES = $(BIN:=.c)

OBJECTS = $(BIN:=.o)

all: $(BIN)

01test: 01test.o

02test: 02test.o

03test: 03test.o pub.o

.c.o:

$(CC) $(CFLAGS) -c $< -o $@

clean:

-rm -rf $(BIN) $(OBJECTS)

一个比較复杂的综合演示样例

//1 pub.cpp
int pub(int a,char *ch,int b)
{
char c = ch[0];
switch(c)
{
case '+':
return a+b;
break;
case '-':
return a-b;
break;
case '*':
return a*b;
break;
case '/':
if (b != 0)
{
return a/b;
}
else
{
return -1;
}
break;
default:
return -1;
break;
} return 0;
}

//2 pub.h
int pub(int a,char *ch,int b);

//3 main.cpp
#include <iostream>
#include <stdlib.h>
#include "pub.h"
using namespace std; int main(int argc,char *argv[])
{
if (argc < 4)
{
cerr << "error" << endl;
return -1;
} cout << argv[1] << ' ' << argv[2] << ' ' << argv[3] << " = "
<< pub(atoi(argv[1]),argv[2],atoi(argv[3])) << endl; return 0;
}

#4 Mackfile

.SUFFIXES:.cpp .o

CC=g++

SOURCE=main.cpp pub.cpp

OBJC=$(SOURCE:.cpp=.o) #将.cpp文件所有替换为.o文件

EXEC=mytest

all:$(OBJC)

$(CC) -o $(EXEC) $(OBJC)

.cpp.o:

$(CC) -o $@ -c $<

clean:

rm -rf $(OBJC)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvempmMjgwNDQxNTg5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

附-假设一条语句在运行Mackfile文件时。不想打印出来,则在其前面加上@符号

比較专业的Makefile编写

#演示样例1

all: myapp

# Which compiler

CC = g++

# Where are include files kept

INCLUDE = .

# Options for development

FLAGS = -g -Wall -ansi

# Options for release

# CFLAGS = -O -Wall -ansi

.SUFFIXES:.cpp .o

SOURCE = main.cpp pub.cpp

OBJC = $(SOURCE:.cpp=.o)

EXEC = myapp

$(EXEC): ${OBJC}

$(CC) -o $(EXEC) $(OBJC)

.cpp.o:

$(CC) -o $@ -I$(INCLUDE) $(FLAGS) -c $<

clean:

rm -rf $(OBJC) $(EXEC)

#演示样例2-加入了install选项

all: myapp

# Which compiler

CC = g++

# Where to install

INSTDIR = /usr/local/bin/

# Where are inlude files kept

INCLUDE = .

# Options for development

CFLAGS = -g -Wall -ansi

# Options for release

# CFLAGS = -O -Wall -ansi

.SUFFIXES: .cpp .o

SOURCE = main.cpp pub.cpp

OBJECT = $(SOURCE:.cpp=.o)

EXEC   = myapp

$(EXEC): $(OBJECT)

$(CC) -o $(EXEC) $(OBJECT)

.cpp.o:

$(CC) -I$(INCLUDE) $(CFLAGS) -o $@ -c $<

clean:

-rm -rf $(OBJECT)

install: $(EXEC)

@if [ -d $(INSTDIR) ] ; then \

cp $(EXEC) $(INSTDIR) ; \

chmod a+x $(INSTDIR)/$(EXEC) ; \

chmod og-w $(INSTDIR)/$(EXEC) ; \

echo "Installed in $(INSTDIR)" ; \

else \

echo "Sory, $(INSTDIR) does not exist." ; \

fi

Makefile学习(二)[第二版]的更多相关文章

  1. Makefile学习(一)[第二版]

    简单介绍 1)make:利用 make 工具能够自己主动完毕编译工作.这些工作包含:假设仅改动了某几个源文件,则仅仅又一次编译这几个源文件[make通过比对对应的.c文件与.o文件的时间];假设某个头 ...

  2. gcc学习(二)[第二版]

    头文件与库文件 1.概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明. 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的.它 ...

  3. Makefile学习(三)[第二版]

    make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...

  4. gdb学习(二)[第二版]

    查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype  ...

  5. TensorFlow 深度学习中文第二版·翻译完成

    原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...

  6. python基础学习二——第二天

    对于python而言,一切事物都是对象,对象是基于类创建的,对象继承了类的属性,方法等特性 一.int 首先我们来查看一下int包含了哪些函数 # python3.x dir(int) # ['__a ...

  7. Makefile学习二

    今天继续对Makefile进行研究,话不多说,进入正题: make常用内嵌函数: 下面利用上面的知识点来实现一个多级目录的Makefile,如下: 多级目录Makefile: 这个例子的目录结构如下: ...

  8. gcc学习(一)[第二版]

    gcc简介 1. gcc是GNU Compiler Collection的缩写.最初是作为C语言的编译器(GNU C  Compiler),作者为Richard Stallman,是GNU项目的奠基者 ...

  9. gdb学习(一)[第二版]

    概述 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式) ...

随机推荐

  1. FFTW程序Demo

    #include<stdio.h> #include<stdlib.h> #include <fftw3.h> #include<string.h> # ...

  2. POJ 1256.Anagram

    2015-06-04 问题简述: 输出一串字符的全排列,顺序不同于一般的字母序,而是 A<a<B<b......<Z<z.所以应该重写一个比较函数. 原题链接:http: ...

  3. BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )

    二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...

  4. 模仿jquery的一些实现

    wylUtil.js //w作为window的形参,就表示window (function(w) { // 定义一个全局的window.wyl变量,就类似于jquery里的$,Jquery对象 w.w ...

  5. JavaScript基础知识----document对象

    对象属性document.title                 //设置文档标题等价于HTML的<title>标签document.bgColor               //设 ...

  6. CentOS搭建PHP服务器环境(LAMP)

    安装httpd mysql mysql-server php: yum install -y httpd mysql mysql-server php php-devel 安装php的扩展 yum i ...

  7. 我的Python成长之路---第八天---Python基础(25)---2016年3月5日(晴)

    多进程 multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  8. Agile methodology

    ntroduction Waterfall model follows application development in phases with checkpoint and deliverabl ...

  9. 梳排序(Comb sort)

    Comb Sort,梳排序或者梳子排序,就像梳子那样有间隔地比较两个数,很形象,O(n*logn)时间复杂度,O(1)空间复杂度,属于不稳定的排序算法.算法的思想是使逆序的元素尽可能快地移动到最终的位 ...

  10. MFC的最大化,最小化,关闭

    最大化.最小化和关闭按钮是窗口中最主要的元素.首先要说明,说他们是按钮其实是不准确的,按钮是一种窗口,而这三个组件根本就不是窗口,而是一个窗口常见的组成部分.出于习惯的原因,这里还是称呼他们为按钮. ...