3

複数のサブプログラムで構成されるsconsで構築しようとしている C++ アプリケーションがあります。

各サブプログラムには、ソース ディレクトリのサブディレクトリに独自のソース ファイルがあります。これらのソース ファイル、たとえばsource/prog1/prog1.cppは、オブジェクト ディレクトリ ee に存在するオブジェクト ファイルにコンパイルされますobject/prog1/prog1.o

各ソース ディレクトリにはターゲット ディレクトリがあり、衝突の可能性がないため、これは正常に機能します。

ただし、私がやろうとしているのは、これらのオブジェクト ファイルを同じbinディレクトリにある実行可能ファイルにリンクすることです。したがって、複数のソース ファイル ( object/prog1object/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"ます。

だから、私の質問はこれです:オブジェクト ファイルを複数のソースから同じバリアント ディレクトリにリンクするにはどうすればよいですか?

4

1 に答える 1