簡體   English   中英

為什么SCons VariantDir()沒有將輸出放在給定目錄中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM