过于前卫的Makefile方式

 

17         过于前卫的Makefile方式

这个陷阱的说法有点吹毛求疵,ACE提供了一种很前卫的Makefile方式,他定义了Makefile的基础变量,以及包括规则。如果使用他来辅助Makefile的书写,特别是在跨平台开发中,你可以大大节省Makefile开发时间。

BIN   = hello_ace

BUILD = $(VBIN)

SRC = $(addsuffix .cpp,$(BIN))

LIBS = -lMyOtherLib

LDFLAGS = -L$(PROJ_ROOT)/lib

#---------------------------------------------------

#Include macros and targets

#---------------------------------------------------

include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU

include $(ACE_ROOT)/include/makeinclude/macros.GNU

include $(ACE_ROOT)/include/makeinclude/rules.common.GNU

include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU

include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU

include $(ACE_ROOT)/include/makeinclude/rules.local.GNU

但是麻烦就在于ACE的这些Makefile方法几乎没有一个文档帮助说明,我一直无法理解$VBIN到底是什么。这也许,另外,定义到规则这一层也大大限制了大家对Makefile的扩展能力。这就有一点点高不成低不就的味道了,Makefile的新手几乎不可能了解ACEMakefile,老手又会因为特殊的需求得不到满足而踌躇。而我个人一般只使用ACE定义的Makefile变量。这些变量大部分在wrapper_macros.GNUplatform_macros.GNU

                                                                                                                                                    表2 ACE Mafile的变量定义

变量

描述

AR

ar 命令的名字

ARFLAGS

ar 的参数

CC

C编译器的命令的

CXX

C++编译器的命令

RC

资源编译器命令的名字

COMPILE.c     

编译C文件的命令行,  一般为:$(CC) $(CFLAGS) $(CPPFLAGS) -c

COMPILE.cc 

编译C++文件的命令行,一般为:$(CXX) $(CCFLAGS) $(CPPFLAGS) $(PTDIRS) –c

COMPILEESO.cc    

 

$(CXX) $(CCFLAGS) $(CPPFLAGS) $(PTDIRS),没太搞明白,不知道为什么和SO有关,好像是为了修正错误增加的。不理也罢

 

CPPFLAGS

 

C,C++语言编译的预标志,比如DEFINDE. CPPFLAGS += $(DEFFLAGS) $(INCLDIRS)

CFLAGS

 

C语言编译选项

CCFLAGS

 

 

C++语言编译选项

DCFLAGS         

Debugging 程序的C语言编译选项,一般在有debug=1变量时有效

DCCFLAGS        

 

Debugging 程序的C++语言编译选项,一般在有debug=1变量时有效

DEFFLAGS

C++ 预处理的DEFINE部分

DLD

dynamic linker 动态库link命令的名字,

LD

linker 命令的名字

IDL

 

CORBA IDL compiler 命令的名字

INCLDIRS

INCLUDE的头文件

LDFLAGS          

 

ld linker flags

LINK.c

链接C文件的命令行

LINK.cc

链接C++文件的命令行,一般为:$(PURELINK) $(PRELINK) $(LD) $(CCFLAGS) $(CPPFLAGS) $(PTDIRS)

MAKEFLAGS

Flags that are passed into the compilation from the commandline

OCFLAGS

 

Optimizing 程序的C语言编译选项

OCCFLAGS

 

Optimizing 程序的C++语言编译选项

PIC              

PIC就是position independent code

PCFLAGS

profiling 程序的C语言编译选项 profiling是什么不要问我。

PCCFLAGS

profiling 程序的C++语言编译选项

PRELINK

LINK之前执行的命令

PURELINK

purify 执行的命令,purify是什么不要问我。

PWD

 

得到当前目录的命令

PTDIRS           

 

模板文件的路径定义

RM

 

删除工具的命令

ACE_MKDIR        

 

递归创建的目录

SOFLAGS

生成.so库时候的参数

SOLINK.cc

生成.so库时候的命令行

VAR

Variant identifier suffix

VDIR

Directory for object code          .obj/

VSHDIR

Directory for shared object code   .shobj/

看起来变量很多,其实要记住和使用的可以很少,你需要留意的主要是.cc结尾的变量就可以了。我们可以使用ACE MakreFile的变量,方便我们的Makefile开发。比如:

我的Makefile,就使用了$(LINK.cc), $(COMPILE.cc)两个宏。

#使用ACEwrapper_macros.GNU的定义变量

include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU

 

#得到C,CPP文件的列表

SRC_FILE = $(wildcard ./*.cpp )

 

#通过.C,.CPP文件名称得到.O文件名称,.o 文件放在../../object/exampleexe/目录下

O_FILE = $(patsubst ./%.cpp, ../../object/exampleexe/%.o, $(CPP_FILE))

 

#输出文件exe_file

OUTFILE = ../../bin/exampleexe

# LIB_ALL –l文件和-L目录的定义

$(OUTFILE): $(O_FILE)

   $(LINK.cc) -o$(OUTFILE) $(O_FILE)  $(LIB_ALL) 

#.o输出文件放在../../object/目录下

../../object/exampleexe/%.o : ./%.cpp

   $(COMPILE.cc) $(INC_ALL) $< -o $@

  

clean:

   $RM -f $(OUTFILE) $(O_FILE)

是不是也很酷,轻松实现Makefile的跨越平台移植。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值