复杂实例

#示例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)

附-如果一条语句在执行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

转载于:https://www.cnblogs.com/itrena/p/5927014.html

Makefile学习(二)[第二版]相关推荐

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

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

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

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

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

    简介 1)make:利用 make 工具可以自动完成编译工作.这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件[make通过比对相应的.c文件与.o文件的时间];如果某个头文件被修改了 ...

  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. TensorFlow 深度学习中文第二版(初稿)

    TensorFlow 深度学习中文第二版 第 1 章深度学习入门 人工神经网络 ANN 如何学习? 神经网络架构 深度学习框架 总结 第 2 章 TensorFlow 的首次观察 TensorFlow ...

  7. 李沐d2l《动手学深度学习》第二版——风格迁移源码详解

    本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...

  8. 李沐《动手学深度学习》第二版比赛2-Classify Leaves

    李沐<动手学深度学习>第二版比赛2-Classify Leaves 我的偶像,李沐大神主讲的<动手学深度学习>(使用Pytorch框架,第一版使用的是MXNet框架)目前已经进 ...

  9. 李沐《动手学深度学习》第二版 pytorch笔记1 环境搭建

    李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 文章目录 李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 此时尚有耐心 虚拟环境搭建 创建虚拟环境 查看 ...

最新文章

  1. C++的STL队列实现栈
  2. 29篇计算机视觉领域论文,篇篇惊艳!内附链接!
  3. redis集群部署步骤
  4. Java泛型的不变性和作用域
  5. 八十一、使用Springboot实现发邮件的需求
  6. boost::log模块测试样板,用于检查每个公共标头是否都是独立的并且没有任何缺失的 #includes
  7. [攻防世界 pwn]——welpwn
  8. MyBatis总结七:动态sql和sql片段
  9. 如何对聚类结果进行分析_产品经理如何进行数据分析?
  10. 物流广告收入实现高速增长 国际投行看好京东转型潜力
  11. anroid Remote Service 使用注意事项
  12. 一年级课程表(4月2日-4月8日)
  13. exlsx表格教程_excel表格格式刷的使用教程详解
  14. Golang 企业级web后端框架
  15. Android 开发笔记2.0
  16. 如何起Linux服务器的21端口,linux下开启ftp的21号端口
  17. 写一封给36岁沈阳出生女性名字叫植瑶的人一封情书
  18. 「分块」数列分块入门1 – 9 by hzwer 解题记录
  19. appium java模拟微信登录,python实战之结合Appium自动化操作微信
  20. 生产答疑_生产周会和数字例会

热门文章

  1. 上市公司降价200万卖房仍然无人接手,有的甚至降价1900万
  2. 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135)
  3. 快播王欣明天就出狱了,他能借钱东山再起吗?
  4. MarkDown编辑器常用语法
  5. 安卓SlidingDrawer
  6. .net pdf转图片_图片转PDF怎么转?推荐两种图片转PDF方法
  7. matlab 图像旋转补色,旋转互补色光学错觉
  8. 巨控 自建服务器,GRM云服务器的Web数据接口.PDF
  9. 为什么梯度下降法对于非线性可分数据有效
  10. UFLDL教程:Exercise:PCA in 2D PCA and Whitening