不同文件下的多个可执行文件编译到同一目录下,这样方便观察编译结果,从而方便进程操作。使用时根据自己的需要在进行局部修改(如 链接库、目标文件等等)。

1、.bashrc 中设置编译主目录(例如)

export MKHOME=$HOME

ORACLE_HOME=/oracle/10G; export ORACLE_HOME

2、主目录中创建一个mak文件夹,文件夹中创建以下三个文件(database.mak、mkstand.mak、platform.mak):

(1)database.mak(嵌入数据库文件编译配置选项,其中libclntsh.so为数据库中的库文件)

#|----------------------------------------------------------------------------|
#| TOPMake 2.0 |
#| Copyright (c) - XXX Software Systems Co., Ltd. |
#| All Rights Reserved |
#|----------------------------------------------------------------------------|
#| FILE NAME : database.ora8.mak |
#|----------------------------------------------------------------------------| DBINCP = .
DBLIBP = -L$(ORACLE_HOME)/lib32
DBLIBS = -lclntsh
DBD =
DBDEF = -g
DBFIX = .pc
DBTYPE =
#DBCHK = sqlcheck=full userid=$(ORACLEUSERID)/$(ORACLEUSERPWD)@$(ORACLETNSNAME)
~

(2)platform.mak(编译默认选项)

#|----------------------------------------------------------------------------|
#| TOPMake 2.0 |
#| Copyright (c) - XXX Software Systems Co., Ltd. |
#| All Rights Reserved |
#|----------------------------------------------------------------------------|
#| FILE NAME : platform.mak |
#|----------------------------------------------------------------------------| SHELL = /bin/sh CC = cc
CXX = g++
DLINK = ld
SLINK = ar
DLFLG = -G
SLFLG = rv
CCFLG = -m32 -Wchar-subscripts -Wcomment -Wformat -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wfloat-equal -Wpointer-arith -Wbad-function-cast -Wcast-qual -Waggregate-return -g
CXXFLG=
EXFLG = -m32 -Wchar-subscripts -Wcomment -Wformat -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wfloat-equal -Wpointer-arith -Wbad-function-cast -Wcast-qual -Waggregate-return -g
DBFLG = -g -O0 -DPRINT_DBOPR_LOG
OPFLG = -g
DLFIX = .so
SLFIX = .a
UXLIBS = -lm
OSDEF =
OSTYPE =

(3)mkstand.mak(编译基本规则)

#|----------------------------------------------------------------------------|
#| TOPMake 2.0 |
#| Copyright (c) - XXX Software Systems Co., Ltd. |
#| All Rights Reserved |
#|----------------------------------------------------------------------------|
#| FILE NAME : mksstand.mak |
#| DESCRIPTIONS : Makefile for all kind of platform, for c and pc file, |
#| for lib(dynamic & static) and execuatable object |
#|----------------------------------------------------------------------------| include $(MKHOME)/mak/platform.mak
include $(MKHOME)/mak/database.mak # environment variables must be define outside of makefile
#
# $MKHOME : home directory of application
# $CCFLG : compiler options for c source code
# $CXXFLG : compiler options for c++ source code
# $DLFLG : link options for dynamic library NO NEED FOR DYNAMIC LIBS && OMIT
# $SLFLG : link options for static library
# $EXFLG : link options for excecuteable object
# $DBFLG : debug mode options
# $OPFLG : optimize mode options BASICALLY NO HEAVY LOAD && MAY BE OMITTED
# $DLFIX : suffix of dynamic library NO NEED FOR DYNAMIC LIBS && OMIT
# $SLFIX : suffix of static library # $OBJS : c object files list
# $LIBS : libs required for executable object
# $DEFS : define flag list
# $TARGET : target objetc name # commands PC = proc RM = rm -f
CP = cp
MV = mv
CD = cd
ECHO = @echo # paths and flags SYSINCP = /usr/include
SYSLIBP = SRCP = $(MKHOME)/src
BINP = $(MKHOME)/bin
LIBP = $(MKHOME)/lib
INCP = $(MKHOME)/incl INCPS = -I$(INCP) -I$(DBINCP)
LIBPS = -L$(LIBP) $(DBLIBP) $(DBLIBS) CCFLGS = $(RLFLG) $(CCFLG) $(DEFS) $(DBDEF) $(OSDEF) $(BITDEF) $(INCPS) $(DBFLG)
CXXFLGS = $(RLFLG) $(CXXFLG) $(DEFS) $(DBDEF) $(OSDEF) $(BITDEF) $(INCPS) $(DBFLG)
DLFLGS = $(DLFLG) $(LIBPS)
EXFLGS = $(EXFLG) $(LIBPS) SLTARG = $(LIBP)/lib$(TARGET)$(SLFIX)
EXTARG = $(BINP)/$(TARGET) debugstatic: setdebug $(SLTARG)
releasestatic: setrelease $(SLTARG)
debugexec: setdebug $(EXTARG)
releaseexec : setrelease $(EXTARG) setdebug:
$(ECHO) $(DBFLG) > $(MKHOME)/mak/.mak.tmp setrelease:
$(ECHO) $(OPFLG) > $(MKHOME)/mak/.mak.tmp $(SLTARG): $(OBJS)
$(ECHO) "Linking [$(SLTARG)] ..."
@$(SLINK) $(SLFLG) $@ $(OBJS)
@$(RM) $(MKHOME)/mak/.mak.tmp $(EXTARG): $(OBJS)
$(ECHO) "Linking [$(EXTARG)] ..."
@$(CC) -o $@ $(EXFLGS) $(OBJS) $$LIBS
@$(RM) $(MKHOME)/mak/.mak.tmp # implicit .SUFFIXES:
.SUFFIXES: .pc .c .o .cpp .pc.o:
$(ECHO) "Compiling [$@] ..."
$(PC) include=$(ORACLE_HOME)/precomp/public include=$(INCP) lines=yes iname=$*$(DBFIX) $(DBCHK)
$(CC) -o $@ `cat $(MKHOME)/mak/.mak.tmp` $(CCFLGS) -c $*.c
$(RM) $*.lis $*.c tp* .cpp.o:
$(ECHO) "Compiling [$@] ..."
@$(CD) `dirname $@` ; \
$(CXX) -o $@ `cat $(MKHOME)/mak/.mak.tmp` $(CXXFLGS) -c `basename $<` .c.o:
$(ECHO) "Compiling [$@] ..."
@$(CD) `dirname $@`; \
$(CC) -o $@ `cat $(MKHOME)/mak/.mak.tmp` $(CCFLGS) -c `basename $<` # clearing object codes cleanstatic : cleanup
@$(RM) $(SLTARG) cleanexec: cleanup
@$(RM) $(EXTARG) cleanup:
@$(RM) $(OBJS)

3、每个需要编译生成可执行的文件夹下创建makefile文件(内容如下)

#|----------------------------------------------------------------------------|
#| TOPMake 2.0 |
#| Copyright (c) - XXX Software Systems Co., Ltd. |
#| All Rights Reserved |
#|----------------------------------------------------------------------------|
#| FILE NAME : sample.exec.mak |
#| DESCRIPTIONS : Sample makefile for executable binary |
#|----------------------------------------------------------------------------| ###############################################################################
PRGOBJS1 = \
$(MKHOME)/src/XXX/XXX.o \
$(MKHOME)/src/XXX/XXX.o \
$(MKHOME)/src/XXX/XXX.o \ PRGTARG1 = XXX
PRGLIBS1 = -lTransCust -lTools -lCommon -lcm -lfnm -lDbs -lHsm
PRGDEFS1 = ###############################################################################
debug all: debugstatic debugexec
release: releasestatic releaseexec
clean: cleanstatic cleanexec ##STATIC LIB
releasestatic debugstatic cleanstatic: ##EXECUTABLE BIN
releaseexec debugexec cleanexec:
@make -f $(MKHOME)/mak/mkstand.mak $@ TARGET="$(PRGTARG1)" OBJS="$(PRGOBJS1)" LIBS="$(PRGLIBS1)" DEFS="$(PRGDEFS1)"

4、执行make可执行文件会生成在(BINP    =   $(MKHOME)/bin)所指定目录下 O(∩_∩)O~

5、静态库生成需要编译的文件夹下创建makefile文件和可执行文件略有不同(make一行写在 ##STATIC LIB下,有时不需要链接其他库 PRGLIBS1)如下:

#|----------------------------------------------------------------------------|
#| TOPMake 2.0 |
#| Copyright (c) - XXX Software Systems Co., Ltd. |
#| All Rights Reserved |
#|----------------------------------------------------------------------------|
#| FILE NAME : sample.staticlib.mak |
#| DESCRIPTIONS : Sample makefile for static library |
#|----------------------------------------------------------------------------| ###############################################################################
PRGOBJS1 = \
$(MKHOME)/src/Tools/xxx.o \
$(MKHOME)/src/Tools/xxx.o \
$(MKHOME)/src/Tools/xxx.o PRGTARG1 = Tools
PRGDEFS1 = ###############################################################################
debug all: debugstatic debugexec
release: releasestatic releaseexec
clean: cleanstatic cleanexec ##STATIC LIB
releasestatic debugstatic cleanstatic:
@make -f $(MKHOME)/mak/mkstand.mak $@ TARGET="$(PRGTARG1)" OBJS="$(PRGOBJS1)" LIBS="$(PRGLIBS1)" DEFS="$(PRGDEFS1)" ##EXECUTABLE BIN
releaseexec debugexec cleanexec:

6、执行make静态库会生成在(BINP    =   $(MKHOME)/lib)所指定目录下 O(∩_∩)O~

实用脚本 4 -- Makefile(不同文件下的多个可执行文件or静态库编译到同一目录下)的更多相关文章

  1. Linux编译Windows共享目录下代码

    Linux编译Windows共享目录下代码(金庆的专栏)万神服务器代码是跨平台的.平时策划在Windows上开自己的服务器测试,测试和发布服务器为Linux.开发时,先在Windows上编译测试,再到 ...

  2. linux下的C语言开发(静态库/动态库)

    动态链接库不是Linux独有的特性,在windows下面也存在这样的特性.一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的.和静态链接库 ...

  3. Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包

  4. [ffmpeg 扩展第三方库编译系列] frei0r mingw32 下编译问题

    在编译安装frei0r的时候遇到两个错误地方, 两个都是在install的时候. 一开始编译都很顺利,输入了 make install之后就走开了,回来一看,报错误. 提示mkdir -p //usr ...

  5. [ffmpeg 扩展第三方库编译系列] 关于 mingw32 下编译libcaca

    在编译前最好先看一下帮助 ./configure --help 开始编译 ./configure  --disable-shared --disable-cxx \ --disable-csharp ...

  6. eclipse中多个工程编译到同一个目录下

    1.点击link source  2.选择Java(ps:Java文件目录)或者resource(ps:配置文件目录)  3.最后结果,然后使用project中的clean进行编译,就可以把两个工程编 ...

  7. autotools源文件相同/不同目录下

    关于Autotools 我们前面的章节中已经讲到了Makefile的使用(点击进入查看文章).我们知道在Linux下面如果编译一个比较大型的项目,我们可以通过Makefile的方式来完成. 但是,我们 ...

  8. Makefile.am文件配置

    Makefile.am Makefile.am是一种比Makefile更高层次的编译规则,可以和configure.in文件一起通过调用automake命令,生成Makefile.in文件,再调用./ ...

  9. Makefile.am文件的实例讲解

    Makefile.am是一种比Makefile更高层次的编译规则,可以和configure.in文件一起通过调用automake命令,生成Makefile.in文件,再调用./configure的时候 ...

随机推荐

  1. 2018.11.14 hibernate中的查询优化---关联级别查询

    查询优化------关联级别查询 集合策略 在Mapper映射文件中添加属性 测试数据 lazy:true 延时加载数据 fetch:select 单表查询 控制台显示输出 结论:单表查询,使用到在加 ...

  2. 一组div跟随鼠标移动,反应鼠标轨迹

    <!DOCTYPE html> <html> <head> <title>div随鼠标移动</title> <style type=& ...

  3. andorid 网络通信最简单demo

    要和后台进行通信 一开始发现接不到数据 后来发生了线程错误 在网上查到:在一些高版本中,与网络通信的操作因为要花费比较大的时间,所以应该放在单独的线程中去做. 但为什么一些网上demo没有放在单独的线 ...

  4. HTML5 小实例

    1.时钟: <!doctype html> <html> <head></head> <body> <canvas id=" ...

  5. SyncUI跨设备同步

    SynUI控制代码 <script type="text/javascript"> /* SyncUI script (Learn more at http://syn ...

  6. js获取站点根目录

    function getRootPath(){        var strFullPath=window.document.location.href;        var strPath=win ...

  7. Vue nodejs商城项目-商品列表价格过滤和加入购物车功能

    一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{     getGoodsList(flag){         var param = {   ...

  8. webpack4——打包html报错解决

    ①先引入html-webpack-plugin插件,然后在终端下载 npm install --save-dev html-webpack-plugin ②我的文件结构 ③修改webpack.dev. ...

  9. xcode 快捷键大全、XCode常用快捷键图文介绍

    其实就是设置里面的快捷键变成了文字版,刚开始用Xcode是不是发现以前熟悉的开发环境的快捷键都不能用了?怎么快捷运行,停止,编辑等等.都不一样了.快速的掌握这些快捷键,能提供开发的效率. 其实快捷键在 ...

  10. 【前行&赛时总结】◇第4站&赛时9◇ CF Round 513 Div1+Div2

    ◇第4站&赛时9◇ CF Round 513 Div1+Div2 第一次在CF里涨Rating QWQ 深感不易……作blog以记之 ( ̄▽ ̄)" +Codeforces 的门为你打 ...