Создайте несколько исходных каталогов в одном целевом каталоге

У меня есть приложение на C ++, которое я пытаюсь создать SCons который состоит из нескольких подпрограмм.

Каждая подпрограмма имеет свои собственные исходные файлы в подкаталоге исходного каталога. Эти исходные файлы, например, source/prog1/prog1.cpp, скомпилированы в объектные файлы, которые находятся в каталоге объектов, например 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",

Итак, мой вопрос заключается в следующем: Как я могу связать объектные файлы из нескольких источников в один и тот же вариант DIR?

2

Решение

В вашем случае я бы позволил SCons создавать различные двоичные файлы в соответствующей папке, а затем использовать Установить строитель скопировать двоичные файлы в bin/ каталог.

Вы бы получили что-то вроде:

env = Environment()
Export('env')

common = env.SConscript("source/common/SConscript_object", variant_dir="object/common", duplicate=0)
Export('common')

prog1 = env.SConscript("source/prog1/SConscript_bin", variant_dir="object/prog1", duplicate=0)
prog2 = env.SConscript("source/prog2/SConscript_bin", variant_dir="object/prog2", duplicate=0)

env.Install('bin', prog1)
env.Install('bin', prog2)

С SConscript подпрограмм, что-то вроде

Import('env')
Import('common')

prog1 = env.Program('prog1', [ env.Glob(*.cpp), common ])

Return('prog1')

Я думаю, что SCons отказывается встраивать разные цели в уникальный каталог вариантов, потому что варианты предназначены для построения заданной цели с разными настройками сборки, такими как режим отладки и выпуска.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector