2012-02-08 7 views
6

Jeśli mam plik wykonywalny, który generuje moc z wielu plików naraz -SCons zwyczaj budowniczy - budowa z wieloma plikami i wyjście jednego pliku

generate_output -o a.out -f input1.txt input2.txt input3.txt 

Czy istnieje sposób, aby napisać taki niestandardowy Builder dla tego ? Co mam w tej chwili jest -

builder = Builder(
     action='generate_output -o $TARGET -f $SOURCE', 
     suffix='.out', src_suffix='.txt') 

Potem tylko generuje pliki w kolejności, która jest nie to, czego naprawdę chciał -

generate_output -o input1.out -f input1.txt 
generate_output -o input2.out -f input2.txt 
# etc... 

Odpowiedz

10

Spróbuj użyć $SOURCES patrz Variable Substitution:

builder = Builder(
     action='generate_output -o $TARGET -f $SOURCES', 
     suffix='.out', src_suffix='.txt') 

Działa to dla mnie w tym prostym przykładzie:

env = Environment() 

builder = Builder(action='cat $SOURCES > $TARGET', 
     suffix='.out', src_suffix='.txt') 

env = Environment(BUILDERS = {'MyBld' : builder}) 

env.MyBld('all', ['a.txt', 'b.txt', 'c.txt']) 

To będzie działać tak długo, jak generate_output nie wymaga -f, aby poprzedzać każdy plik wejściowy.