一、文件配置目录

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

最新文章

  1. spring源码分析之cache注解
  2. MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
  3. App软件开发的完整在线流程(一看就懂)
  4. Windows-006-映射网络驱动器图文详解
  5. Nodejs创建https服务器(Windows 7)
  6. 本人在安装ADT Bundle for windows的各种问题总结
  7. 第十五章 String讲解
  8. .net c# 提交包含文件file 的form表单 获得文件的Stream流
  9. 关于URL的理解
  10. Java 9 揭秘(8. JDK 9重大改变)
  11. PSR-4 自动加载器
  12. 2018-4-5-MEMS
  13. java请求参数转换
  14. Java学习笔记54(反射详解)
  15. CSS中position属性介绍(新增sticky)
  16. yersinia的DHCP池耗尽断网攻击
  17. Wamp2.5 64bit,无法改动MySQL datadir位置
  18. linux 命令行 执行 php
  19. TFS(Visual Studio Team Services) git认证失败 authentication fails 的解决方案
  20. C语言程序设计&#183;谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

热门文章

  1. c# json key转大小写
  2. c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)
  3. netty中的发动机--EventLoop及其实现类NioEventLoop的源码分析
  4. Mybatis_two
  5. Python自学day-3
  6. 如何做一个大数据seo人员
  7. CentOS 7出现Failed to start firewalld.service: Unit is masked的解决办法和firewalld 防火墙开关
  8. 学习体验centos7 下根目录扩容操作(步骤详细!!!)
  9. Input标签中Type的类型及详细用法
  10. Azkaban 3.73.1 使用简介