###再探Makefile
使用makefile。以前刚开始接触Makefile的时候,写过一个最简单的Makefile。点击查看Evernote原文。
#@author: gr
#@date: 2014-07-20
#@email: forgerui@gmail.com
一、Contents
$@
表示目标文件$^
表示依赖文件$<
表示第一个依赖文件
main: main.o h1.o h2.o
gcc -o main main.o h1.o h2.o
#上面可以简化为如下
gcc -o $@ $^
#-------------------------------#
main.o: main.c h1.h h2.h
#编译命令可以简写为
gcc -c $<
缺省规则,这个规则表示所有的 .o文件都是依赖与相应的.cpp件的.例如
.cpp.o:
g++ -c $<
5. `make clean`: `-rm edit $(objects)`前面的`-`表示如果出错不要管,继续后面的操作.`make clean`不要放在第一个,否则会变成默认项.
6. `pkg-config`问题:
使用pkg-config可以检索系统中安装*库文件*的信息。-–cflags 参数可以给出在编译时所需要的选项,而 -–libs 参数可以给出连接时的选项。
gcc -c pkg-config –-cflags glib-2.0
sample.c
7. 变量的高级用法
+ 第一种是变量值的**替换**。其格式是`$(var:a=b)`或是`${var:a=b}`,其意思是,把变量`var`中所有以“a”字串“结尾”的“a”替换成“b”字串。
```bash
foo=main.o h1.o h2.o
#$(foo)中所有以“.o”字串结尾全部替换成“.c”
$new=$(foo:.o=.c)
#$(bar)的值就是“a.c b.c c.c”。
- 第二种是把变量的值再当成变量.
x = y
y = z
a := $($(x))
在这个例子中,$(x)
的值是“y”,所以$($(x))
就是$(y)
,于是$(a)
的值就是“z”。(注意,是x=y
,而不是x=$(y)
)
二、最后学习得到的最后结果。
#file start
CC=g++
CFLAGS=`pkg-config --cflags opencv`
LFLAGS=`pkg-config --libs opencv`
SOURCES=main.cpp stl.cpp non-member.cpp
OBJECTS=$(SOURCES:.cpp=.o)
RUN=stlDemo
all: $(RUN)
depend:
$(CC) $(CFLAGS) -MM $(SOURCES) > .deps
clean:
-rm -rf $(RUN) $(OBJECTS)
$(RUN): $(OBJECTS)
$(CC) -o $@ $^ $(LFLAGS)
.cpp.o:
$(CC) -c $< $(CFLAGS)
include .deps
#file end
###再探Makefile的更多相关文章
- 【再探backbone 02】集合-Collection
前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...
- ViewPager+Fragment再探:和TAB滑动条一起三者结合
Fragment前篇: <Android Fragment初探:静态Fragment组成Activity> ViewPager前篇: <Android ViewPager初探:让页面 ...
- 再探jQuery
再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...
- [老老实实学WCF] 第五篇 再探通信--ClientBase
老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...
- Spark Streaming揭秘 Day7 再探Job Scheduler
Spark Streaming揭秘 Day7 再探Job Scheduler 今天,我们对Job Scheduler再进一步深入一下,对一些更加细节的源码进行分析. Job Scheduler启动 在 ...
- 再探ASP.NET 5(转载)
就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. Visual Stud ...
- 再探java基础——break和continue的用法
再探java基础——break和continue的用法 break break可用于循环和switch...case...语句中. 用于switch...case中: 执行完满足case条件的内容内后 ...
- 第四节:SignalR灵魂所在Hub模型及再探聊天室样例
一. 整体介绍 本节:开始介绍SignalR另外一种通讯模型Hub(中心模型,或者叫集线器模型),它是一种RPC模式,允许客户端和服务器端各自自定义方法并且相互调用,对开发者来说相当友好. 该节包括的 ...
- 深入出不来nodejs源码-内置模块引入再探
我发现每次细看源码都能发现我之前写的一些东西是错误的,去改掉吧,又很不协调,不改吧,看着又脑阔疼…… 所以,这一节再探,是对之前一些说法的纠正,另外再缝缝补补一些新的内容. 错误在哪呢?在之前的初探中 ...
随机推荐
- Oracle-数据实现竖排打印
--存放重证评分的数据表create table ZZPFapache2( ZZ_datetime DATE, --时间 ZZ_zongfen INTEGER, --总分 ZZ_shiwan ...
- 转载总结一些关于Google chart api的知识
<script type="text/javascript"> google.setOnLoadCallback(drawChartLine); f ...
- (二) win8+XAML Binding(数据绑定)
第一次接触Binding是用到listview的时候,ListView中如果要动态显示一些内容,我一开始想的就是动态生成一个item,然后插入... 其实用Binding就不用在代码中涉及listvi ...
- [置顶] 【cocos2d-x入门之五】导演类CCDirector
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12646337 既然cocos2d-x都帮我们封装好了,使得开发与平台无关,那 ...
- .net 开发人员的瓶颈和职业发展
.net 开发人员的瓶颈和职业发展 现在社会比前几年浮躁了,越来越多的人抱怨薪水低,高薪工作不好找; 诚然这有CPI的压力,可是也有很多人没有认清自己的职业发展. 很多.net程序员个各种纠结,想拿高 ...
- redis优化优秀文选
Redis是一个单线程的内存数据库.下载地址如下:http://download.redis.io/releases/redis-2.8.11.tar.gz在Redis的src目录运行make命令,然 ...
- 如何用 iptables 禁止某个ip?
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- HDU 3452 Bonsai(网络流之最小割)
题目地址:HDU 3452 最小割水题. 源点为根节点.再另设一汇点,汇点与叶子连边. 对叶子结点的推断是看度数是否为1. 代码例如以下: #include <iostream> #inc ...
- RapidXml用法
一.写xml 文件 #include <iostream> #include "rapidxml/rapidxml.hpp" #include "rapidx ...
- 玩转iOS开发 - 简易的实现2种抽屉效果
BeautyDrawer BeautyDrawer 是一款简单易用的抽屉效果实现框架,集成的属性能够对view 滑动缩放进行控制. Main features 三个视图,主视图能够左右滑动.实现抽屉效 ...