当前位置: 首页 > news >正文

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

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

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) 2000-2003 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) 2000-2003 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) 2000-2003 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) 2000-2003 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) 2000-2003 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~

 

转载于:https://www.cnblogs.com/uriel/p/4165395.html

相关文章:

  • C# dataGridView不显示默认行的解决办法
  • 微信宣布降低企业号认证门槛 1000人以下的企业无需规模证明
  • thinkphp3.2分页
  • 临时数据更改规范
  • [xPlugin] smartupload jsp图片上传
  • 【推荐】我们这一代人的困惑
  • WCF架构日记-1
  • 【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
  • HOG特征-理解篇
  • 使用Hadoop的MapReduce与HDFS处理数据
  • [转]浅析360的危害 我为什么推荐卸载360
  • 15篇干货博客 38本书 4门公开课 减掉20斤体重 我的2014总结
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • SQL Server调优系列进阶篇(深入剖析统计信息)
  • C++ new用法
  • 〔开发系列〕一次关于小程序开发的深度总结
  • android图片蒙层
  • Centos6.8 使用rpm安装mysql5.7
  • Java反射-动态类加载和重新加载
  • Js基础——数据类型之Null和Undefined
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • oschina
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 数组大概知多少
  • 数组的操作
  • 智能网联汽车信息安全
  • kubernetes资源对象--ingress
  • MyCAT水平分库
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • zabbix3.2监控linux磁盘IO
  • #QT(智能家居界面-界面切换)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (二)c52学习之旅-简单了解单片机
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (篇九)MySQL常用内置函数
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转载)利用webkit抓取动态网页和链接
  • ./和../以及/和~之间的区别
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • /proc/vmstat 详解
  • @EventListener注解使用说明
  • @selector(..)警告提示
  • @我的前任是个极品 微博分析
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [].slice.call()将类数组转化为真正的数组
  • []Telit UC864E 拨号上网
  • [383] 赎金信 js
  • [8481302]博弈论 斯坦福game theory stanford week 1