【转载】过于前卫的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的新手几乎不可能了解ACE的Makefile,老手又会因为特殊的需求得不到满足而踌躇。而我个人一般只使用ACE定义的Makefile变量。这些变量大部分在wrapper_macros.GNU,platform_macros.GNU
表2 ACE Mafile的变量定义
看起来变量很多,其实要记住和使用的可以很少,你需要留意的主要是.cc结尾的变量就可以了。我们可以使用ACE MakreFile的变量,方便我们的Makefile开发。比如:
我的Makefile,就使用了$(LINK.cc), $(COMPILE.cc)两个宏。
#使用ACE的wrapper_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的跨越平台移植。
————————————————
版权声明:本文为CSDN博主「fullsail」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fullsail/article/details/2915676