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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维家可以导入别人的方案吗_广州深圳天津形位公差检测三维缺陷检测服务

形位公差检测三维缺陷检测服务标签&#xff1a;形位公差检测 三维缺陷检测服务 三维缺陷检测铸造工艺是一种经济实惠的毛坯成形方式&#xff0c;对于一些形状复杂的零件更能显示出它的经济性。比如汽车发动机的缸体和缸盖&#xff0c;船舶螺旋桨以及精致的艺术品等。本期案例的…

对“粘连”footer布局的思考和总结

经典的"粘连"footer布局 参考文章链接在文章末尾&#xff0c;简单的语言总结如下&#xff1a; 经典的“粘连”footer布局就是。我们有一块内容<main>。当<main>的高度足够长的时候&#xff0c;紧跟在<main>后面的元素<footer>会跟在<main…

这样去写你的 HTML

昨天在 twitter 上说&#xff0c;怎么忍心把页面写得这么难用&#xff1f;是的&#xff0c;这个世界还有一群人等着我们创建出来的东西&#xff0c;可以让他们的生活能过得更容易呢。比如那些需要读屏软件的用户。作为一个前端&#xff0c;我们又怎么会忍心呢。之前就一直想写这…

iframe懒加载_前端常见问题

原地址&#xff1a;https://blog.csdn.net/Mr_JavaScript/article/details/843110681. flex布局&#xff1a;又叫做弹性布局任何一个容器都可以指定flex布局&#xff0c;如display:flex 或 display:inline-flex注意&#xff1a;设置了flex布局以后&#xff0c;子元素的float&am…

手机运行服务器无响应,《最强蜗牛》服务器无响应怎么办 服务器无响应解决方法...

导读最强蜗牛服务器无响应怎么办&#xff1f;本作在今日迎来了正式的公测&#xff0c;这会导致大批量的玩家同时涌入进来&#xff0c;而服务器也因此而遭受到了非常大的符合&#xff0c;所以会导致后续加入进来的玩家出现服务器无响应进不去的现象。下面就为大家带...最强蜗牛服…

自己动手写操作系统--个人实践

近期開始看于渊的《自己动手写操作系统》这本书&#xff0c;刚開始看就发现做系统的引导盘居然是软盘&#xff01;心里那个汗啊&#xff01; 如今都是U盘了&#xff0c;谁还用软盘。于是考虑用U盘。 于是開始下面步骤&#xff1a; 1、既然书上说给先要把软盘做引导盘&#xff0…

sql加上唯一索引后批量插入_阿里大佬总结的52条SQL语句性能优化策略,建议收藏...

你知道的越多&#xff0c;不知道的就越多&#xff0c;业余的像一棵小草&#xff01;你来&#xff0c;我们一起精进&#xff01;你不来&#xff0c;我和你的竞争对手一起精进&#xff01;编辑&#xff1a;业余草cnblogs.com/SimpleWu/p/9929043.html推荐&#xff1a;https://www…

Web缓存技术

本章导读 缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈&#xff0c;所以读取大容量数据时&#xff0c;使用缓存来直接为客户端服务&#xff0c;可以减少客户端与服务器端的数据交互&#xff0c;从而大大提高程序的性能。 本章从缓存所在的命…

【HTML5初探之绘制图像(上)】看我canvas元素引领下一代web页面

弧度一块可能有误&#xff0c;需要再研究 导航 【初探HTML5之使用新标签布局】用html5布局我的博客页&#xff01; 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放 【HTML5初探之绘制图像&#xff08;上&#xff09;】看我canvas元素引领下一代web页面 【HTML5初…

关卡 动画 蓝图 运行_UE4入门之路(基础蓝图篇):蓝图的制作

蓝图系统简介蓝图系统是UE4中十分有代表性的一个特点&#xff0c;所谓蓝图就是一种可视化的脚本。该系统非常灵活且非常强大&#xff0c;因为它为设计人员提供了一般仅供程序员使用的所有概念及工具。 程序员能够很方便的创建一个基础系统&#xff0c;并交给策划进一步在蓝图中…

虚拟串口服务器zenetmanager,Avocent服务器/串口管理 KVM

MergePoint Unity交换机在单个设备中结合了 KVM over IP和串行控制台管理技术。这项独特的结合为IT管理员提供了用于访问和控制服务器、网络设备及其他数据中心和分支办公室设备的完整远程管理解决方案。MergePoint Unity交换机直接与物理KVM、USB和串行端口进行安全的远程带外…

KAFKA分布式消息系统

Kafka[1]是linkedin用于日志处理的分布式消息队列&#xff0c;linkedin的日志数据容量大&#xff0c;但对可靠性要求不高&#xff0c;其日志数据主要包括用户行为&#xff08;登录、浏览、点击、分享、喜欢&#xff09;以及系统运行日志&#xff08;CPU、内存、磁盘、网络、系统…

jar打包 剔除第三方依赖以及它的依赖_面试官:为什么Spring Boot的jar可以直接运行?...

来源&#xff1a;Gormats Notesfangjian0423.github.io/2017/05/31/springboot-executable-jar/Spring Boot Loader抽象的一些类JarLauncher的执行过程关于自定义的类加载器LaunchedURLClassLoaderSpring Boot Loader的作用SpringBoot提供了一个插件spring-boot-maven-plugin用…

CQRS架构图

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/darkness/blog/814243

Analyzer普通用户登录不了[从网络访问此计算机]

问题&#xff1a; 最近客户诺奇反映说Analyzer普通用户登录不了&#xff0c;但是发现管理员又可以登录&#xff0c;几经周折发现原来是系统的本地安全策略设置了不让远程使用本地账户密码登录系统导致。解决方案&#xff1a; 修改本地安全策略的“从远程访问此计算机”中的用户…

源码 移植_FreeModbus移植总结

modbus是一项工业上经常用到的通讯协议&#xff0c;而freemodbus是一款开源的从机协议栈。关于它的移植网上已经有了很多的文章&#xff0c;但是大多都只是针对其中部分问题的表述。本文将会把自己在移植freemodbus过程中遇到的问题以及freemodbus的源码分析尽量表述清楚。&…

word标题大纲级别_快速按标题层级把Word转Excel—附详细操作步骤

如何快速把层级分明的word文档转换成横向从属结构的excel表格一、问题描述文档如下图所示。文档一共三个层次&#xff0c;大纲级别分别是1、2、3级&#xff0c;左则是其文档结构图&#xff0c;可以看出文档层级分明。最终要将文档转换成如下横向从属结构的表格。一个层次的内容…

servlet中getWriter和getOutputStream的区别

getWriter();getOutputStream();区别&#xff1a;1、getWriter()用于向客户机回送字符数据2、getOutputStream()返回的对象&#xff0c;可以回送字符数据&#xff0c;也可以回送字节数据&#xff08;二进制数据&#xff09;如何选择&#xff1a;若果我们回送字符数据&#xff0…

execve系统调用_张凯捷—系统调用分析(3) (基于最新Linux5.0版本系统调用日志收集系统)...

在上一篇文章《系统调用分析(2)》中介绍和分析了32位和64位的快速系统调用指令——sysenter/sysexit和syscall/sysret&#xff0c;以及内核对快速系统调用部分的相关代码&#xff0c;并追踪了一个用户态下的系统调用程序运行过程。本篇中将基于最新的Linux-5.0内核&#xff0c;…

批量下载小说网站上的小说(python爬虫)

随便说点什么 因为在学python&#xff0c;所有自然而然的就掉进了爬虫这个坑里&#xff0c;好吧&#xff0c;主要是因为我觉得爬虫比较酷&#xff0c;才入坑的。 想想看&#xff0c;你可以批量自动的采集互联网上海量的资料数据&#xff0c;是多么令人激动啊&#xff01; 所以我…