Makefile学习(二)[第二版]
复杂实例
#示例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学习(二)[第二版]相关推荐
- gcc学习(二)[第二版]
头文件与库文件 1.概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明. 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的.它 ...
- Makefile学习(三)[第二版]
make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...
- Makefile学习(一)[第二版]
简介 1)make:利用 make 工具可以自动完成编译工作.这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件[make通过比对相应的.c文件与.o文件的时间];如果某个头文件被修改了 ...
- gdb学习(二)[第二版]
查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype ...
- TensorFlow 深度学习中文第二版·翻译完成
原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...
- TensorFlow 深度学习中文第二版(初稿)
TensorFlow 深度学习中文第二版 第 1 章深度学习入门 人工神经网络 ANN 如何学习? 神经网络架构 深度学习框架 总结 第 2 章 TensorFlow 的首次观察 TensorFlow ...
- 李沐d2l《动手学深度学习》第二版——风格迁移源码详解
本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...
- 李沐《动手学深度学习》第二版比赛2-Classify Leaves
李沐<动手学深度学习>第二版比赛2-Classify Leaves 我的偶像,李沐大神主讲的<动手学深度学习>(使用Pytorch框架,第一版使用的是MXNet框架)目前已经进 ...
- 李沐《动手学深度学习》第二版 pytorch笔记1 环境搭建
李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 文章目录 李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 此时尚有耐心 虚拟环境搭建 创建虚拟环境 查看 ...
最新文章
- C++的STL队列实现栈
- 29篇计算机视觉领域论文,篇篇惊艳!内附链接!
- redis集群部署步骤
- Java泛型的不变性和作用域
- 八十一、使用Springboot实现发邮件的需求
- boost::log模块测试样板,用于检查每个公共标头是否都是独立的并且没有任何缺失的 #includes
- [攻防世界 pwn]——welpwn
- MyBatis总结七:动态sql和sql片段
- 如何对聚类结果进行分析_产品经理如何进行数据分析?
- 物流广告收入实现高速增长 国际投行看好京东转型潜力
- anroid Remote Service 使用注意事项
- 一年级课程表(4月2日-4月8日)
- exlsx表格教程_excel表格格式刷的使用教程详解
- Golang 企业级web后端框架
- Android 开发笔记2.0
- 如何起Linux服务器的21端口,linux下开启ftp的21号端口
- 写一封给36岁沈阳出生女性名字叫植瑶的人一封情书
- 「分块」数列分块入门1 – 9 by hzwer 解题记录
- appium java模拟微信登录,python实战之结合Appium自动化操作微信
- 生产答疑_生产周会和数字例会
热门文章
- 上市公司降价200万卖房仍然无人接手,有的甚至降价1900万
- 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135)
- 快播王欣明天就出狱了,他能借钱东山再起吗?
- MarkDown编辑器常用语法
- 安卓SlidingDrawer
- .net pdf转图片_图片转PDF怎么转?推荐两种图片转PDF方法
- matlab 图像旋转补色,旋转互补色光学错觉
- 巨控 自建服务器,GRM云服务器的Web数据接口.PDF
- 为什么梯度下降法对于非线性可分数据有效
- UFLDL教程:Exercise:PCA in 2D PCA and Whitening