2009-07-02 6 views
8

新しいプロジェクトにSConsを使用することを考えています。私はVariantDirがかなり混乱していると感じていますが、それは本当にうまく見えます。SCons VariantDir()は、指定されたディレクトリに出力を入れないのはなぜですか?

私は、1つのディレクトリにいくつかのCソースファイルを入れた簡単なプロジェクトを持っています。gccの2つの異なるオプションセットを使って、 "通常"と "プロファイル"モードでビルドしたいと考えています。私はアウトプットをそれぞれ通常の/ profileと/ディレクトリに入れたい。

テストのために、main()という1つのソースファイルt.cに切り詰めました。私SConstructファイルが同じディレクトリにある、とこのようになります:私はsconsのを実行すると

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']) 

、私はそれがに置くとリリース/にt.exeことを期待していますが、それは、現在のディレクトリにそれらを置きます。

scons:***同じターゲットで異なるアクションが指定された2つの環境がに設定されています。

基本的に、私のVariantDir()呼び出しが指定された出力ディレクトリreleaseに出力を置くようにsconsに指示していないのは確かです。

(これは私がよく読んだドキュメントやニュースグループですが、この質問には何も答えません。最も近いのはthis pageです。同様のことが記述されていますが、別のsrc /ディレクトリと2つsconsファイルを分離し、それらの間で変数をインポート/エクスポートすることは楽しいとは思われません)。

答えて

8

はい、VariantDirはsconsで混乱します。うまく宣伝ではありませんが、ソースディレクトリとして、現在のディレクトリを使用して、同じディレクトリにSConstructとSConscriptの両方を入れることができます

# SConstruct 
SConscript('SConscript', build_dir='build', src='.') 

# SConscript 
Program('main.c') 

は、私は2つを使用して回避する方法を発見したことがありませんファイルバリアントDIRを理解しようと、私の正気を保ちながら、:)

8

を、私はこの呼び出しを使用して、ビルドディレクトリにバイナリを分離することができた:

あなたは二つのレベル以下のディレクトリにバイナリを配置する場合

、次の操作を行います。

基本的に
# SConstruct 
SConscript('SConscript', variant_dir='build/release', src_dir='../..', duplicate=0) 

、戻ってあなたのソースディレクトリにビルドディレクトリからのパスとしてsrc_dirパラメータを提供しています。

3

http://www.scons.org/wiki/VariantDir%28%29が言ったように、私はLinux上でsconsでそれを実行し

VariantDir('release','.',duplicate=0) 
env=Environment() 
env.Program('release/t',['release/t.c']) 

Note that when you're not using an SConscript file in the src subdirectory, you must actually specify that the program must be built from the build/hello.c file that SCons will duplicate in the build subdirectory.

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. 

私はそれはまた、はい、それはないSConscriptが使用される場合にのみ、該当するポイントであるWin32の

+0

に働くだろうと思います。 –

関連する問題