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

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. LA 4254 贪心

    题意:有 n 个工作,他的允许的工作时间是 [l,r] ,工作量是 v ,求CPU最速度的最小值. 分析: 可能太久没有做题了,竟然脑子反应好慢的.还是很容易想到二分,但是二分怎么转移呢? 可以看出, ...

  2. 布局方式-inline-block布局

    .像文本一样排block元素 .没有清除浮动等问题 .需要处理间隙     一种方式 <style> .container{ width: 800px; height: 200px; fo ...

  3. idea 使用maven构建项目时,target bytecode version经常自动变化

    解决方法:在工程的pom.xml中添加 <build> <plugins> <plugin> <groupId>org.apache.maven.plu ...

  4. 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 ...

  5. 2018.11.11 Java的 三大框架:Struts+Hibernate+Spring

    ·定义:Java三大框架主要用来做WEN应用.Struts主要负责表示层的显示: Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作): Hibernate主要是数据持久化到数据库. ...

  6. mysql(安装、启动、删除)服务

    必须在管理身份下运行 方式一: 安装服务 将 MySQL 安装为服务的方式: "C:\Program Files\MariaDB 10.3\bin\mysqld.exe" inst ...

  7. NTU Long-Term Positioning Dataset

    NTU Long-Term Positioning Dataset 地址:http://www.clarenceliang.com/dataset/ 場景:NTU 博理館外廣場 描述:超過一個月連續拍 ...

  8. MVC学习一:MVC简单流程

    MVC学习一:MVC初次接触 1.MVC简单流程 1.1.服务器接收客户端请求后,解析URL(根据 路由表里配置的URL来分析 类名(控制器名)和方法名)根据请求的类名,创建对应的控制器类对象,并调用 ...

  9. toad for sql server

    数据库连接工具 toad for sql  sever

  10. 示例浅谈PHP与手机APP开发,即API接口开发

    示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...