一个能自己主动搜索源文件并自己主动推导的Makefile
今天看了一天的makefile的写法。东拼西凑。好不easy写出了一个makefile。颇有成就感,记录下来,以备温习之用。
如果有两个头文件文件夹 header1,header2;两个cpp文件文件夹,src1,src2,一个lib文件夹
写一个完整的makefile过程例如以下:
1 定义可运行文件的名称
TARGET = Main
2 指定此编译project所要使用的头文件所在的文件夹
INC = -Iheader1 -Iheader2
3 指定cpp文件所在的文件夹
VPATH = .:src1:src2
4 指定全部的cpp文件
SRC_PATH = $(foreachdir,$(subst :, ,$(VPATH)),$(wildcard $(dir)/*.cpp))
解释:
foreach。subst,wildcard为makefile的内置函数,当中wildcard函数为字符串连接函数,把函数中的两个參数连接成一个。subst是字符串替换函数。在此句中意思是把VPATH变量中的冒号替换成空格。
foreach函数,就是把subst函数的返回值。以空格为分隔符,循环取值赋给dir,然后接受wildcard的处理。
这句的整体意思是:从VPATH中获取每一个文件夹,并分别找出此文件夹下全部的cpp文件,赋给SRC_PATH变量。
5 定义中间object文件存放的文件夹。
OBJ_DIR = ./obj
6 全部的object文件要依照和源码相应的文件夹存放,定义object文件的文件夹
OBJ_PATH = $(addprefix $(OBJ_DIR)/, $(subst :, ,$(VPATH) ) )
解释:
addprefix函数是加前缀的函数,词句中是给VPATH中全部已经定义的文件夹加上./obj/的前缀。
7 定义连接成目标文件所须要的全部的object文件的名称
OBJS = $(addprefix $(OBJ_DIR),$(subst.cpp,.o,$(SRC_PATH)))
8 创建一个object文件的文件夹
MAKE_OBJECT_DIR := $(shell mkdir -p$(OBJ_DIR) $(OBJ_PATH))
*************************
9 定义有用的编译器
CXX = g++
CXXFLAGS = -g
10 定义目标文件的生成规则
$(TARGET) : $(OBJS)
$(CXX) -o $@ $(OBJS) $(INC)$(CXXFLAGS)
11 定义object文件的生成方式:
$(OBJ_DIR)/%.o : %.cpp %.cpp.d
$(CXX) -o $@ -c $< $(INC) $(CXXFLAGS)
12 定义.cpp.d文件的生成方式
DEPS = $(OBJS:.o=.cpp.d)
$(DEPS) : $(OBJ_DIR)/%.cpp.d : %.cpp
$(CXX) $< -MM $(INC) >$(OBJ_DIR)/$<.d
13 定义清理函数
clean:
@rm -rf ./obj
@rm -rf $(TARGET)
至此,一个通用的makefile完毕了,假设添加源码文件夹和头文件文件夹,仅仅须要在INC变量和VPATH变量处加上此文件夹就可以。中间object文件和文件的依赖关系自己主动生成。
一个能自己主动搜索源文件并自己主动推导的Makefile的更多相关文章
- 推荐一个百度网盘搜索工具www.sososo.me
推荐一个百度网盘搜索工具 http://www.sososo.me
- 使用DWR实现自己主动补全 相似百度搜索框的自己主动显示效果
使用DWR实现自己主动补全 自己主动补全:是指用户在文本框中输入前几个字母或汉字的时候,自己主动在存放数据的文件或数据库中将全部以这些字母或汉字开头的数据提示给用户供用户选择 在日常上网过程中,我们常 ...
- 第一个C#应用 【搜索软件】
搜索软件V1.0 [附软件截图][http://pan.baidu.com/s/1mihEbe4] 设备搜索:支持广播搜索[local search],指定ip[range search]搜索,直接w ...
- 一个简单的ExtJS搜索建议框
封装的是一个Ext4.2的组件,继承并兼容于Ext的ComboBox. 实现原理非常easy,在 combo 中监听 keyup 事件就可以. 搜索建议的Combo.基本上全然兼容, 使用方式与Com ...
- 【每天学一点-06】在Vue中使用Vant-Picker选择器,并且给选择器添加一个类似Antd-Select-showSearch的搜索功能
一.在Vant文档中,Picker组件的API中是没有showSearch这一选项的 1.Vant-Picker 文档 2.Antd-Select 文档 3.需要完成的需求 4.因为在H5项目中出现了 ...
- 一个漂亮的DIV搜索条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- linux 下一个 osw先从操作系统和标准脚本主动发起
linux 下一个 osw与操作系统的引导和启动标准的脚本.osw它指的是--os watcher,这是一个显示器os这些指标shell脚本.osw监测数据一般使用oracle技能评估os资源的使用, ...
- xgboost 最优参数, df某一个字段进行字符串搜索
0.909323 with: {'max_depth': 6, 'min_child_weight': 0.8, 'n_estimators': 800} df_huoguo = df[df.c ...
- html学习 - 自己主动跳转与自己主动刷新
自己主动刷新 事实上自己主动刷新和跳转没啥差别,刷新就是跳转到本地址. 有几种办法,首先是直接在html的<head>标签里加入以下的代码. html代码 代码都放在<head> ...
随机推荐
- LeetCode(111) Minimum Depth of Binary Tree
题目 Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the s ...
- Java使用Robot完成QQ轰炸机
效果 网上吵架吵不过别人怎么办?女朋友让你从1数到10000怎么办?想恶搞朋友怎么办?QQ轰炸机你值得拥有!(注:为了更好的学习编程,敲的练手项目,仅作学习使用) 自定义发送内容,自定义发送条数,&q ...
- 03007_HttpServlet
1.创建 new---Servlet package com.gzdlh.servlet; import java.io.IOException; import javax.servlet.Servl ...
- 18,OS模块
import os print(os.getcwd())#执行所在的目录 # os.makedirs('\python作业\景s12\day18')#可生成多层递归目录 # os.mkdir('\py ...
- Python Flask+Mysql练习题
#!/usr/bin/pythonfrom flask import Flask,render_template,request,redirect,sessionimport MySQLdb as m ...
- vmware安装CentOS " Intel VT-x 处于禁用状态"
我刚用虚拟机vmware 11安装CentOS 7 ,出现错误“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题,如下图. Intel VT-x 即Virtualiza ...
- centos 7安装libreoffice
centos 7安装libreoffice Centos下的LibreOffice安装: 关键字: LibreOffice , sdk ,汉化 ,解压 安装Centos7之后,系统安装了libreo ...
- CSU-1336: Interesting Calculator,最短路思想!
1336: Interesting Calculator 这道题被LZQ抢了一血,于是去读题发现题意不难,纯广搜结果写的一塌糊涂. 题意:给你两个数x,y.由x每次可以经过一系列操作变换,每个变换都有 ...
- POJ-1236 Network of Schools,人生第一道Tarjan....
Network of Schools 题意:若干个学校组成一个计算机网络系统,一个学校作为出发端连接着若干个学校,信息可以传送到这些学校.被链接的学校不需要再次与出发端相连,现在问你:A:最少选几个学 ...
- oracle create directory
1.新建directory的语法 CREATE [OR REPLACE] DIRECTORY directory AS 'pathname'; 例如: create or replace direct ...