2011-10-09 2 views
6

Я пытаюсь изменить мои файлы SCons так, чтобы они поместили файлы в каталог build. Первоначально я, хотя VariantDir может быть вариантом, но судя по всему, что я прочитал, и примеры, которые он не делает, что я хочу.SCons Вывод в каталоге Build

Есть ли какой-либо простой способ заставить SCons поместить вывод в определенную директорию, не переписывая все источники и скрипты?

+0

чем проблема с 'VariantDir'? Вы пытались использовать 'duplicate = 0'? –

+0

Для использования 'VariantDir' вы должны продать всю свою душу. Это означает, что вам либо нужно делать все в «VariantDir», либо ничего. То, что я и многие другие хотят, это положить только ** сгенерированный материал ** в сборку, и не все. – abergmeier

+0

Разве это не то, что делает 'duplicate = 0'? Из документов: Дублирование исходного дерева может быть отключено путем задания дублирующего аргумента на 0 (ноль). Это заставит scons вызывать Builders, используя имена путей исходных файлов в src_dir и имена путей производных файлов в файле variant_dir. –

ответ

0

Оказывается, что я добавил сайт_scons, который добавил замену строителей (например, «Exe» вместо «Program») и задал эмиттер для этого строителя, который заменил часть пути каталогом сборки. Это требует использования альтернативного строителя на всех ваших SConscripts.

В качестве альтернативы вы можете попробовать подкласс «Среда» и переписать основные цели для использования перезаписи целей. Затем вы указываете свою среду как значение по умолчанию (изменение Scons.Script.DefaultEnvironment или что-то в этом роде). Этот подход сохранил STonscripts статичным, но стал очень грязным и требует дополнительного обслуживания с течением времени, когда меняются внутренние сёстры.

0

Использование VariantDir с duplicate=0 должно работать.

+0

Это потребует от меня переписать большинство скриптов сборки. – abergmeier

0

Вы можете использовать Install или InstallAs для целевого выхода. Меня устраивает.

lib = env.SharedLibrary(target = "some_target", source = sources); 
env.InstallAs(target = "folder/output_name.ext", source = lib); 
2

После борьбы с VariantDir на некоторое время (он не делал вообще ничего), я в конечном итоге с помощью variant_dir параметра в вызове верхнего уровня SConscript, который вызывает все вниз по течению сборки выходов в конечном итоге в параллели " build 'tree: SConscript(['subdirs/SConscript'], variant_dir='build', duplicate=0) Моя структура сборки представляет собой иерархию SConscripts в поддиректорах/под-поддиреях и т. д. При этом вызове выходы выводятся в сборке/под-subdirs на том же уровне, что и в источнике.

Это съедает один уровень, хотя (subd), и использование «../build» не помогает. Решение состоит в том, чтобы иметь файл SConscript на том же уровне, как и SConstruct называют SConscript(['SConscript'], variant_dir='build', duplicate=0)

Смотрите также Force Scons output (exe, obj, lib & dll) to specific build directory - он имеет аналогичный ответ

Смежные вопросы