转:发一个自己用过的makefile .
#gcc test.cpp -L. -Wl,-Bdynamic -ltestlib -Wl,-Bstatic -ltestlib -Wl,-Bdynamic
#make clean; make init; make SERVER_NAME=krc_search
#make clean; make init; make SERVER_NAME=krc_feedback
CC=g++
OBJ_PATH=./objs
SERVER_SRC = $(wildcard *.cpp)
SERVER_OBJ = $(patsubst %.cpp, $(OBJ_PATH)/%.o, $(SERVER_SRC))
INCDIR= -I/usr/local/freetds0.91/include \
-I/usr/local/include \
-I/usr/include \
-I../Component/inc \
-I../Component/inc/jsoncpp \
-I../redis-2.6.13/deps -I./
LIBDIR= -L/usr/lib64 -L/usr/lib64/mysql -L/usr/local/freetds0.91/lib -L../Component/inc
SOLIBS= -lcrypto -lcurl -lmysqlclient -lsybdb
WLPATH= -Wl,--rpath=/usr/local/freetds0.91/lib \
-Wl,--rpath=/usr/lib64/boost \
-Wl,--rpath=/usr/local/lib \
-Wl,--rpath=/usr/lib \
-Wl,--rpath=/usr/lib64/mysql \
-Wl,--rpath=/usr/local/freetds0.91/lib
ARLIBS= -Wl,-Bstatic ../Component/inc/libcomponent.a \
-Wl,-Bstatic /usr/lib64/boost/libboost_system.a \
-Wl,-Bstatic /usr/lib64/boost/libboost_thread.a \
-Wl,-Bstatic /usr/lib64/boost/libboost_regex.a \
-Wl,-Bstatic /usr/local/lib/libevent.a \
-Wl,-Bstatic /usr/local/freetds0.91/lib/libsybdb.a \
-Wl,-Bstatic ../Component/inc/jsoncpp/libjsoncpp.a \
-Wl,-Bstatic ../redis-2.6.13/deps/hiredis/libhiredis.a
$(SERVER_NAME):$(SERVER_OBJ)
$(CC) -Wall -pthread -D KRC_SERVER_NAME=$(SERVER_NAME)_FLAG -g -o $@ $(INCDIR) $(WLPATH) $^ $(ARLIBS) $(LIBDIR) -Wl,-Bdynamic $(SOLIBS)
init:
@mkdir -p ./objs
unit_test: CommonUtil.cpp testUtil/DgramSock.cpp testUtil/TestUtil.cpp
$(CC) -pthread -g -o $@ $(INCDIR) $(WLPATH) $^ $(ARLIBS) $(LIBDIR) -Wl,-Bdynamic $(SOLIBS)
clean:
rm -rf *.o krc_search unit_test krc_feedback objs
$(SERVER_OBJ):$(OBJ_PATH)/%.o:%.cpp
$(CC) -c -g -D KRC_SERVER_NAME=$(SERVER_NAME)_FLAG $(INCDIR) $< -o $@
help:
@echo "make clean; make init; make SERVER_NAME=krc_search"
@echo "make clean; make init; make SERVER_NAME=krc_feedback"
注意:动态库与静态库的混合链接
Linux默认的链接是动态库,找不到动态库的情况下才会选择静态库;
使用方式为:gcc test.cpp -L. -ltestlib
如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库;
使用方式为:gcc test.cpp -L. -static -ltestlib
当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的方式。这时需要作用-Wl的方式:
gcc test.cpp -L. -Wl,-Bstatic -ltestlib -Wl,-Bdynamic -ltestlib
另外还要注意系统的运行库使用动态连接的方式,所以当动态库在静态库前面连接时,必须在命令行最后使用动态连接的命令才能正常连接,如:
gcc test.cpp -L. -Wl,-Bdynamic -ltestlib -Wl,-Bstatic -ltestlib -Wl,-Bdynamic
转:发一个自己用过的makefile .的更多相关文章
- 发一个可伸缩线程池大小的python线程池。已通过测试。
发一个可伸缩线程池大小的线程池. 当任务不多时候,不开那么多线程,当任务多的时候开更多线程.当长时间没任务时候,将线程数量减小到一定数量. java的Threadpoolexcutor可以这样,py的 ...
- 一个工程实例来学习 Makefile
March 3, 2015 8:19 PM Makefile 文件的编写 学习前的准备 需要准备的工程目录结构如下: . ├── add │ ├── add_float.c │ ├── add ...
- 一个自动管理项目的Makefile(C语言)
Linux 是所有嵌入式软件工程师绕不过去的坎, makefile 是在Linux系统中绕不过去的坎. 花了几天时间初步学习和了解了makefile 的作用以及功能,并且制作了一个通用型的makefi ...
- 一个通用的两级Makefile例子
目的 进行如项目的顶层目录后,运行make,即可直接编译项目中所有的源文件,并生成最终的可执行文件 实现头文件自动依赖 添加源文件不用修改Makefile,且可以自动编译新文件 顶层目录下添加文件夹, ...
- 也发一个自己实现的android简单文件选择器代码。支持多卡,排序
一个很简单的文件选择器对话框,支持双sd卡,当然前提是要有sd卡..并且实现了排序效果. 只有100多行的代码,基本的思路就是用listview显示目录下的所有子文件,再判断是文件还是目录. 利用Co ...
- 发一个自己写的php框架
这个框架是我在学习php初期练手写的,现在分享出来希望对初学者有一定帮助. 目录结构:app:网站系统目录 ---common:网站配置目录 ---tpl:网站模板目录 ---log ...
- nw.js---开发一个百度浏览器
使用nw.js开发一个简单的百度浏览器就很简单了,只需要在配置里面写入: { // "main": "index.html", "main" ...
- UWP-开发一个具有闹钟,天气预报,翻译,语音功能的Demo
UWP即Windows 10中的Universal Windows Platform简称.即Windows通用应用平台,在Windows 10 Mobile/Surface(Windows平板电脑)/ ...
- 发一个比trace功能更强大debug工具,MonterDebugger
经常看到兄弟说trace不出东西啊,这样给你调试会带来很多不便:加入说我们需要将运行时的debug信息和之前某个版本的进行比对:又加入说我们需要在运行时通过debug动态调整显示对象的属性:查看当前整 ...
随机推荐
- Java泛型之类型未被擦除
大家都知道Java源码在编译之后会擦除泛型信息,现在来看一种泛型未被擦除的情况,见ConcurrentHashMap.comparableClassFor方法. ParameterizedType.g ...
- Codeforces Round #301 (Div. 2) C. Ice Cave BFS
C. Ice Cave Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/problem/C ...
- Vue学习记录-初探Vue
写在开头 2017年,部门项目太多,而且出现了一个现象,即:希望既要有APP,也能够直接扫码使用,也能放到微信公众号里面. 从技术角度来说,APP我们可以选择原生开发,也可以选择ReactNative ...
- Linux下使用ping出现destination is unreachable的问题可能性
ping时出现request time out和destination is unreachable request time out是指icmp包发出后,长时间没有回应,所以会产生request t ...
- HelloWorld 和相关设置
写这篇文章的初衷很简单,就是想再一次证明 IntelliJ IDEA 对于 Java 开发人员来说,确实比 eclipse 要好用得多,鉴于目前市面上关于 IntelliJ IDEA 的教程比较少,叙 ...
- Hbulider 支持less保存自动编译
设置less配置:文件写 .less,路径找lessc.cmd,找不到就下载,命令参数写:%FileName% %FileBaseName%.css这样以后就可以less文件自动生成css了!
- (转)SQL查询案例:多行转换为一行
原文:http://www.cnblogs.com/sammon/archive/2012/05/10/2494362.html 测试表与测试数据 CREATE TABLE TestTitle ( n ...
- Js组件layer的使用
作为独立组件使用 layer 引入好layer.js后,直接用即可 <script src="layer.js"></script> <script& ...
- 由学习《软件设计重构》所想到的代码review(一)
前言 对于一个程序猿来讲怎样来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我常常接触的一些程序猿来看,他们买了非常多技术重构类书籍.可是看完后代码编写能力并没有显著提 ...
- 直播 背景 技术体系 乐视云直播Demo
背景 最近工作需要做一款直播APP,恩是的,从RTMP协议的实现开始到处理服务器高并发.负载均衡.客户端播放器实现等等等..... 估计全部写完我也到而立之年了吧...... BOSS们估计也是发现了 ...