【转载】过于前卫的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

posted @ 2020-04-28 15:50  soqu36  阅读(195)  评论(0编辑  收藏  举报