Makefile简单的配置
2024-10-02 04:20:50
一、文件配置目录
1)原目录
demo
├── Makefile
├── demo.cpp
├── demo.hpp
└── main.cpp
2)make之后的目录
demo
├── Makefile
├── demo.cpp
├── demo.hpp
├── demo.o
├── main.cpp
├── main.o
└── target
二、 a setup for makefile
objects = main.o demo.o #定义一个变量
target: $(objects) #最终目标文件及其依赖的文件和生成方式
clang++ -std=c++11 $(objects) -g -o target #生成命令
main.o: demo.hpp #中间文件及其依赖文件和生成方式
clang++ -std=c++11 main.cpp -g -c -o main.o #生成命令
demo.o: demo.hpp #中间文件及其依赖文件和生成方式
clang++ -std=c++11 demo.cpp -g -c -o demo.o #生成命令
clean: #伪中间文件,既动作
rm -rf target $(objects) #清楚编译链接所产生的文件
注:对于中间文件的依赖文件,我们可以利用make的自动推导功能,只制定自定义依赖的头文件即可;对于中间文件的生成方式,由于默认的生成方式存在问题,我们需要制定。
三、more
1)对于大型的project,我们可以新建一个src目录,将各个模块的源文件放在其下
2)对于编译产生的中间文件,我们可以新建一个build目录,并将其置于其下
3)对于产生的最终目标文件,我们可以新建一个bin目录,并将其置于其下
4)对于编译链接,我们可以采用范性编程的思想,利用find和patsubst等命令来构造sources和objects等变量
如下:
#Folders
SRCDIR := src
BUILDDIR := build
TARGETDIR := bin
#target
EXECUTABLE := target
TRAGET = $(TARGETDIR)/$(EXECUTABLE)
#code lists
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name "*.$(SRCEXT)")
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o)) $(TRAGET): $(OBJECTS)
@mkdir -p $(TARGETDIR)
@clang++ -std=c++11 $^ -g -o $(TRAGET) $(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(BUILDDIR)
@clang++ -std=c++11 -c -o $@ $< clean:
@rm -rf target $(TARGETDIR) $(BUILDDIR)
demo
├── Makefile
├── bin
│ └── target
├── build
│ ├── demo.o
│ └── main.o
└── src
├── demo.cpp
├── demo.hpp
└── main.cpp
最新文章
- spring源码分析之cache注解
- MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
- App软件开发的完整在线流程(一看就懂)
- Windows-006-映射网络驱动器图文详解
- Nodejs创建https服务器(Windows 7)
- 本人在安装ADT Bundle for windows的各种问题总结
- 第十五章 String讲解
- .net c# 提交包含文件file 的form表单 获得文件的Stream流
- 关于URL的理解
- Java 9 揭秘(8. JDK 9重大改变)
- PSR-4 自动加载器
- 2018-4-5-MEMS
- java请求参数转换
- Java学习笔记54(反射详解)
- CSS中position属性介绍(新增sticky)
- yersinia的DHCP池耗尽断网攻击
- Wamp2.5 64bit,无法改动MySQL datadir位置
- linux 命令行 执行 php
- TFS(Visual Studio Team Services) git认证失败 authentication fails 的解决方案
- C语言程序设计&#183;谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂
热门文章
- c# json key转大小写
- c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)
- netty中的发动机--EventLoop及其实现类NioEventLoop的源码分析
- Mybatis_two
- Python自学day-3
- 如何做一个大数据seo人员
- CentOS 7出现Failed to start firewalld.service: Unit is masked的解决办法和firewalld 防火墙开关
- 学习体验centos7 下根目录扩容操作(步骤详细!!!)
- Input标签中Type的类型及详细用法
- Azkaban 3.73.1 使用简介