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

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. Android(java)学习笔记27:TextView属性大全

    TextView属性大全: android:autoLink       设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/ph ...

  2. 如何使用react-redux

    之前学习了react,也学习了redux,那么react-redux是什么呢?实际上他是一个第三方的模块,他可以帮助我们在react之中更加方便的使用redux.首先如果想用react-redux,先 ...

  3. HDU 2586 How far away ?【LCA】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Time Limit: 2000/1000 MS (Java/Oth ...

  4. 2018.10.10 Java的The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 错误

    我们在用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on t ...

  5. 【洛谷P3119】[USACO15JAN]草鉴定Grass Cownoisseur

    草鉴定Grass Cownoisseur 题目链接 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从1号草场出发,最后 ...

  6. android 界面控件 textview 全解

    textview基本使用: <TextView 10. android:id="@+id/txtOne" 11. android:layout_width="200 ...

  7. Less 常用基础知识

    LESS 中的注释 也可以额使用css 中的注释(/**/) 这种方式是可以被编译出来的. 也可以使用// 注释 不会被编译的 变量 声明变量的话一定要用@开头 例如:@变量名称:值: @test_w ...

  8. 解析 Nginx 负载均衡策略

    转载:https://www.cnblogs.com/wpjamer/articles/6443332.html 1 前言 随着网站负载的不断增加,负载均衡(load balance)已不是陌生话题. ...

  9. Mac系统配置php环境

    [写在前面——叨叨叨] -_-#急着配环境的同志们可以绕道.最近学校的实验室里接了一个小项目——考勤刷卡系统,利用RFID在硬件层获取学生卡的ID,通过wifi传输至服务器,进行考勤信息存储,手机端获 ...

  10. datatable根据条件设置表格行中字的颜色或背景

    使用row回调函数 "rowCallback": function (row, data) { if (xxx) { //给行添加背景色 $(row).css("back ...