我正在努力改進對於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