我正在努力改进对于Bitfighter的冗长的Linux构建过程,并且遇到了make问题。我的过程其实很简单,因为make(几乎)是普遍的,所以如果可以的话,我想坚持下去。使用make构建我的项目
下面我附上我目前的Makefile,它的工作原理,但很笨拙。我正在寻找改进它的方法,并且在这一点上有三个具体问题。
第一个,该项目可以建立几个选项。我们来看看这个例子的调试和专用。专用选项将排除所有UI代码,并为托管(但不玩游戏)创建更有效的二进制文件。调试选项向编译器添加一个标志,激活调试代码。人们可能希望用这两种选项中的任何一种或两种选项来构建游戏。
所以问题是,我该如何做这项工作?正如您从下面makefile中的注释中所看到的那样,通过设置DFLAGS = -DTNL_DEBUG来启用调试。我想有用户类型
make dedicated debug
而不是
make dedicated DFLAGS=-DTNL_DEBUG
我如何重写我的makefile所以,这将工作?
其次,当我在不同版本的Linux上安装lualibs包时,我得到不同的库。例如,在Ubuntu上,当我使用apt-get安装lualib软件包时,我在我的/ usr/lib文件夹中获得了lua5.1.a。在Centos上,当我用yum安装相同的东西时,我在我的/ usr/lib文件夹中以liblua.a结束。我怎样才能弄清楚我拥有哪个图书馆,并将其链接到?很明显,-l指令不够聪明。我希望用户不必担心Lua在安装时结束的位置,以及makefile才能正常工作。
最后,有没有什么办法让使检测是否一定需要的包(freeglut,例如)尚未安装,并可以自动安装它们,或者至少提醒用户他们需要得到事实他们安装(而不是简单地终止一个神秘的错误消息)?
谢谢!
这是我的Makefile。
# Bitfighter Makefile ####################################### # # Configuration # # # Some installs of lua call the lua library by different names, and you # may need to override the default lua library path. For the ServerHitch # CENTOS installs, for example, you will need to specify the lua library # on the make command line: # LUALIB=/usr/lib/liblua.a # # # To compile Bitfighter with debugging enabled, specify # DFLAGS=-DTNL_DEBUG # on the make command line # # # Building with make on Windows is still highly experimental. You will # probably need to add # WFLAGS="-DWIN32 -D_STDCALL_SUPPORTED" THREADLIB= GLUT=-lglut32 INPUT=winJoystick.o # to the make command line to have any hope of getting it to work! :-) # # ####################################### CC=g++ -g -I../tnl -I../glut -I../openal -DTNL_ENABLE_LOGGING THREADLIB= -lpthread GLUT=-lGL -lGLU -lglut INPUT=linuxInput.o OBJECTS_ZAP=\ CTFGame.o\ ...many more... BotNavMeshZone.o\ ../master/masterInterface.o\ CFLAGS= DFLAGS= EXEFILE=bitfighter OPENAL=../openal/linux/libopenal.a LUALIB=-llua5.1 WFLAGS= .c.o: $(CC) $(DFLAGS) $(WFLAGS) -c $(CFLAGS) $< .cpp.o : $(CC) $(DFLAGS) $(WFLAGS) -c $(CFLAGS) $< default: ../exe/bitfighter bitfighter: ../exe/bitfighter dedicated: CFLAGS=-DZAP_DEDICATED dedicated: GLUT= dedicated: OPENAL= dedicated: EXEFILE=bitfighterd dedicated: ../exe/bitfighter ../exe/bitfighter: $(OBJECTS_ZAP) $(CC) -o ../exe/$(EXEFILE) $(OBJECTS_ZAP) ../tnl/libtnl.a \ ../libtomcrypt/libtomcrypt.a \ $(OPENAL) $(GLUT) $(THREADLIB) $(LUALIB) -lstdc++ -lm ../master/masterInterface.o: make -C ../master clean: rm -f $(OBJECTS_ZAP) ../exe/bitfighter ../exe/bitfightered cleano: rm -f $(OBJECTS_ZAP)
我认为,对于我的情况,而不是陷入autotools的复杂性,我会创建一个简单的bash脚本,找出哪些标志传递制造。如果我的构建比现在更复杂,那么我会采纳你的建议。对于我现在需要的东西来说,看起来似乎过分了。 – Watusimoto 2010-01-04 18:38:49