one makefile file
#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
from:http://blog.csdn.net/gdutliuyun827/article/details/17320599
one makefile file的更多相关文章
- 【转】Linux makefile 教程 非常详细,且易懂
From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...
- Makefile经典教程(掌握这些足够)
makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员 ...
- Linux makefile 教程 非常详细,且易懂
最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- 1.3 Makefile 工程管理
1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...
- make file教程(转)
最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- 跟我一起写 Makefile
转自 陈皓 的博客:http://blog.csdn.net/haoel/article/details/2886 1. 概述 2. 关于程序的编译和链接 3. Makefile 介绍 4. Make ...
- [转] Makefile经典教程(掌握这些足够)
目录(?)[-] Makefile 介绍 1 Makefile的规则 2 一个示例 3 make是如何工作的 4 makefile中使用变量 5 让make自动推导 6 另类风格的makefile 7 ...
- [转]Linux下的Makefile
Makefile 介绍——————— make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序. 首先,我们用一个示例来说明Makefile的书写规则.以便 ...
- 【转载】Linux下makefile详解--跟我一起写 Makefile
概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
随机推荐
- 教你50招提升ASP.NET性能(三):使用Microsoft的PDBs调试和分析外部的程序集和库
(3)Use Microsoft’s PDBs to debug or profile external assemblies or libraries 招数3: 使用Microsoft的PDBs调试 ...
- android自动填充短信验证码
自动拦截短信实际上就是在系统注册一个BroadcastReceiver,然后通过设置拦截短信的: filter.addAction("android.provider.Telephony.S ...
- Struts2 Action的访问路径
1. Action的访问路径 扩展名 缺省以.action结尾,请参考:default.properties文件,可以通过配置改变这一点: <constant name="st ...
- [Effective C++ --006]若不能使用编译器自动生成的函数,就该明确拒绝
■本文内容■□第一节 <引言> 在条款五的讲解中,我们已经知道编译器是聪明的家伙,它会帮助你生成类的构造函数.析构函数.一个copy构造函数和一个赋值运算符.有时真的要感谢编译器所做的这一 ...
- Pull Requests
Contribution Guide Issue Tracker You can find outstanding issues on the GitHub Issue Tracker. Pull R ...
- 考试宝典-真题园安卓AppV2.1.0新版发布啦,全新界面,全新体验,全面适配Android 5.0&6.0系统!
真题园移动客户端是真题园网 http://www.zhentiyuan.com 旗下的一款学习考试应用App. 1.全新适配Android5.0.6.0系统,重新优化架构网络通信模块. 2.全新清爽U ...
- android百度地图定位开发
一.activity import android.app.Activity; import android.graphics.Point;import android.graphics.PointF ...
- OC中字典:NSDictionary类是如何使用的
字典就是关键字及其定义(描述)的集合.Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象).然后你就可以用这个关键字来 ...
- JAVA_Gson
package com.qf.mobiletrain01; import java.util.List; import com.google.gson.Gson; import com.google. ...
- java8 之java.time
Java 8 之 java.time 包 标签: java java8 | 发表时间:2013-10-15 08:29 | 作者:coderbee 分享到: 出处:http://coderbee.ne ...