![](/img/trans.png)
[英]Using SCons' VariantDir and Repository to build using custom Generator
[英]Why does SCons VariantDir() not put output in the given directory?
我正在考慮將SCons用於新項目。 它看起來非常好,雖然我發現VariantDir
非常混亂。
我有一個簡單的項目,在一個目錄中有一些C源文件,我想在“正常”和“配置文件”模式下構建 - 與gcc有兩組不同的選項。 我希望輸出分別進入普通/和配置文件/目錄。
為了測試,我已經減少了只有一個源文件tc,其中有一個main()
。 我的SConstruct
文件位於同一目錄中,如下所示:
normal = DefaultEnvironment(tools=['mingw'], CCFLAGS = '-O2')
normal.VariantDir('release', '.', duplicate=0)
normal.Program('t', ['t.c'])
#profile = normal.Clone(CCFLAGS='-O2 -pg', LINKFLAGS = '-pg')
#profile.VariantDir('profile', '.', duplicate=0)
#profile.Program('t', ['t.c'])
當我運行scons時,我希望它將to和t.exe放入release /,但它將它們放在當前目錄中。 並且我無法運行它,並且3個配置文件行未注釋 - 如果我這樣做,我會收到此錯誤:
scons:***為同一目標指定了兩個具有不同操作的環境:to
基本上,我不確定為什么我的VariantDir()調用沒有告訴scons將輸出放在指定的輸出目錄中, release
。
(我在文檔和新聞組中讀了很多,但沒有回答這個問題。我最接近的是這個頁面 ,它描述了類似的東西,但它涉及一個單獨的src /目錄和兩個獨立的scons文件,以及在它們之間導入/導出變量。這看起來不太愉快。)
是的,VariantDir在scons中令人困惑。 雖然宣傳不好,但您可以將SConstruct和SConscript放在同一目錄中,使用當前目錄作為源目錄
# SConstruct
SConscript('SConscript', build_dir='build', src='.')
和
# SConscript
Program('main.c')
我從來沒有找到一種方法來避免使用兩個文件,同時保持我的理智試圖理解變量目錄:)
我能夠使用此調用在構建目錄中分隔二進制文件:
# SConstruct
SConscript('SConscript', variant_dir='build', src_dir='..', duplicate=0)
如果要將二進制文件放入以下兩個級別的目錄中,請執行以下操作:
# SConstruct
SConscript('SConscript', variant_dir='build/release', src_dir='../..', duplicate=0)
基本上,將src_dir
參數作為從構建目錄返回到源目錄的路徑。
正如http://www.scons.org/wiki/VariantDir%28%29所說,
請注意,當您未在src子目錄中使用SConscript文件時,必須實際指定必須從SC /將在build子目錄中復制的build / hello.c文件構建程序。
VariantDir('release','.',duplicate=0)
env=Environment()
env.Program('release/t',['release/t.c'])
當我在Linux上使用scons
運行它時。
scons -u .
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: release
gcc -o release/t.o -c t.c
gcc -o release/t release/t.o
scons: done building targets.
我想它也適用於Win32
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.