Makefile简单的配置
一、文件配置目录
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
Makefile简单的配置的更多相关文章
- 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置
目录 沁恒CH32V003(一): CH32V003F4P6开发板上手报告和Win10环境配置 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置 硬件准备 沁 ...
- tftp服务器简单安装配置
tftp服务器最简单安装配置 1.安装tftp-server sudo apt-get install tftpd-hpa sudo apt-get install tftp-hpa(如果不需要客户端 ...
- Gcc的Makefile简单使用
Gcc的Makefile简单使用http://blog.chinaunix.net/uid-9330295-id-2425867.html
- vb6-很简单的配置密码验证提示
'很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...
- cisco路由器 三层交换机简单环境配置实例(图)
出处:http://www.jb51.NET/softjc/56600.html cisco路由器&三层交换机简单环境配置实例 一.网络拓扑图: 二.配置命令: 1.路由器的配置: inter ...
- ZooKeeper系列(2)--基于ZooKeeper实现简单的配置中心
ZooKeeper节点的类型分为以下几类: 1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点 2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效 ...
- java:安装tomcat8/tomcat9(简单安装配置)
java:安装tomcat8/tomcat9(简单安装配置) pache-tomcat-8.5.23(免安装板) 1.安装完成后右击我的电脑—属性—高级系统设置—环境变量, 在系统变量中添加以下变量 ...
- 释放SQL Server占用的内存 .Net 读取xml UrlReWriter 在web.config中简单的配置
释放SQL Server占用的内存 由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存.所以很多 ...
- MyCAT简单入门配置
MyCAT简单入门配置 安装jdk 建议1.7以上 安装mysql 安装MyCAT Mycat 源码:https://github.com/MyCATApache/Mycat-Server Mycat ...
随机推荐
- Qt中加载Libevent静态库(通过reimp和rs两条语句将lib转为a)
文章来源:http://blog.sina.com.cn/s/blog_731bf4c90102wnpr.html 本文仅是个人经验总结,若有错误欢迎指教! 最近要做一个跨平台的项目,同时也涉及到网络 ...
- C语言宏定义##连接符和#符的使用(MFC就是靠##自动把消息和消息函数对应起来了,借助宏来减少switch case代码的编写量)
C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面 ...
- 发现 TSplitter 在嵌套时不好用, 索性写了个替代品(处理MouseDown,MouseMove,MouseUp,然后设定控件的Left值就可以了)
代替 TSplitter 的 TDirPanel 类: unit DirPanel; interface uses Classes, Controls, Forms, ExtCtrls; type ...
- 多进程demo
多进程实现DOS重定向输出,界面如下: 主要的代码实现如下: #define MAXREADBUFFERLEN (60 * 1000) void CRedirectDlg::OnBnClickedBu ...
- 浅谈Java中的命名规范
现代软件架构的复杂性需要协同开发完成,如何高效地协同呢? 答案是:制定一整套统一的规范. 无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没 ...
- PhpStorm 配置 PHPUnit
配置说明 全局安装phpunit代码 composer global require phpunit/phpunit 该代码会自动保存在 /User/你的用户名/.composer/vendor/ph ...
- F#周报2019年第26期
新闻 逐渐演化的.NET Core框架 Visual Studio提示与技巧 Windows Termina(预览) Microsoft在GitHub上的工程师从2000名增加至25000名 视频及幻 ...
- Java项目接入sso单点登录
最近在落地cat(java开发的一款开源监控系统)接入公司的内部项目,其中有项需求是接入公司的sso单点登录系统.研究了公司之前java项目接入sso系统,大部分是采用spring框架,然后依赖spr ...
- 用arduino制作具有无限数据传输功能的气象站
本项目是用arduino开源硬件,来快速制作具有无限数据传输功能的气象站,我之前做过一个带数据记录功能的气象站项目,这次算是升级和改进的版本. 第1步:构想 首先,需要增加从气象站到室内接收器的无线数 ...
- java finally块执行时机分析
java里 finally 关键字通常与try catch块一起使用.用来在方法结束前或发生异常时做一些资源释放的操作.最近也看到网上有一些讨论try catch finally关键词执行的顺序的文章 ...