複数のサブプログラムで構成されるsconsで構築しようとしている C++ アプリケーションがあります。
各サブプログラムには、ソース ディレクトリのサブディレクトリに独自のソース ファイルがあります。これらのソース ファイル、たとえばsource/prog1/prog1.cpp
は、オブジェクト ディレクトリ ee に存在するオブジェクト ファイルにコンパイルされますobject/prog1/prog1.o
。
各ソース ディレクトリにはターゲット ディレクトリがあり、衝突の可能性がないため、これは正常に機能します。
ただし、私がやろうとしているのは、これらのオブジェクト ファイルを同じbin
ディレクトリにある実行可能ファイルにリンクすることです。したがって、複数のソース ファイル ( object/prog1
、object/prog2
など) はすべて同じターゲット ディレクトリ ( bin
) に入ります。
ディレクトリ レイアウトは次のようになります。
application
source
prog1
prog1.cpp
something.cpp
prog2
prog2.cpp
somethingelse.cpp
object
prog1
prog1.o
something.o
prog2
prog2.o
somethingelse.o
bin
??? <- what I'm concerned with
私は次の SConstruct スクリプトでそれを達成しようとしています:
env = Environment()
Export('env')
#common objects
common=env.SConscript("source/common/SConscript_object", variant_dir="object/common", duplicate=0)
Export('common')
#sub-programs
env.SConscript("source/prog1/SConscript_bin", variant_dir="bin", duplicate=0)
env.SConscript("source/prog2/SConscript_bin", variant_dir="bin", duplicate=0)
ただし、scons は次のエラーで不平を言っています。
scons: *** 'bin' already has a source directory: 'source/prog1'.
各サブプログラムがbinディレクトリに独自のディレクトリを持つようにすると、エラーはなくなりvariant_dir="bin/prog1"
ます。
だから、私の質問はこれです:オブジェクト ファイルを複数のソースから同じバリアント ディレクトリにリンクするにはどうすればよいですか?