2013-10-28 43 views
1

我有一個包含子目錄中的許多文件的項目。我有一個處理編譯的簡單Makefile。它看起來像這樣:編寫scons腳本來處理許多子目錄中的文件編譯

CC = g++ -Wall -ansi -pedantic 
all: 
$(CC) -O2 engine/core/*.cpp engine/objects3d/*.cpp engine/display/*.cpp engine/io /*.cpp engine/math/*.cpp engine/messages/*.cpp *.cpp -o project1 -lGL -lGLU -lX11 `sdl-config --cflags --libs` 

clean: 
@echo Cleaning up... 
@rm project1 
@echo Done. 

但是我需要遷移到SCons。我不知道如何編寫一個能夠自動處理在子目錄中查找所有* .cpp文件並將它們包含在編譯過程中的腳本。

+0

你可以在這裏找到一些體面的教程:http://www.scons.org/doc/production/HTML/scons-user/index.html – Brady

+0

這失敗了使用工具來管理構建的整個目的;每次你會得到整個源代碼樹的完整編譯。如果您更改文件中的單個字符,是否真的想從頭開始重建所有內容? – DanielKO

回答

4

這是怎麼做你在你的Makefile SCons中有什麼。您應該將此Python代碼放在​​名爲SConstruct的項目根目錄的文件中,並且只需執行scons即可。要清潔,執行scons -c

env = Environment() 
env.Append(CPPFLAGS=['-Wall', '-ansi', '-pedantic', '-O2', '-lGL', '-lGLU', '-lX11']) 

# Determine compiler and linker flags for SDL 
env.ParseConfig('sdl-config --cflags') 
env.ParseConfig('sdl-config --libs') 

# Remember that the SCons Glob() function is not recursive 
env.Program(target='project1', 
      source=[Glob('engine/core/*.cpp'), 
        Glob('engine/objects3d/*.cpp'), 
        Glob('engine/display/*.cpp)', 
        Glob('engine/io/*.cpp'), 
        Glob('engine/math/*.cpp'), 
        Glob('engine/messages/*.cpp'), 
        Glob('*.cpp')]) 

Here是使用SDL與SCons的一個環節。

這裏是關於SCons ParseConfig() function的信息。

+0

謝謝,它的工作,但我仍然遇到與SDL的問題。它給了我下面的迴應: 'g ++ -o EnemyShip.o -c -Wall -ansi -pedantic -O2 -lGL -lGLU -lX11 -lSDL -I/usr/include/sdl EnemyShip.cpp 在包含引擎的文件EnemyShip.h中的/core/engine.h:4,0, :EnemyShip.cpp中的4, :1: engine/core/core.h:8:18:致命錯誤:SDL.h:沒有這樣的文件或目錄' 所以需要'sdl-config --cflags --libs'。我檢查了它,以下命令的工作原理: 'g ++ -o EnemyShip.o -c -Wall -ansi -pedantic -O2 -lGL -lGLU -lX11'sdl-config --cflags --libs' EnemyShip.cpp' –

+1

好的,我更新了答案並添加了一個指向SDL頁面的鏈接以及如何將其與SCons一起使用。 – Brady

+0

非常感謝,它的工作。我仍然有一些連接器的問題,但我想嘗試自己解決它。解決了 :)。 –

相關問題