В SCons мои генераторы команд создают смехотворно длинные командные строки. Я бы
хотелось бы иметь возможность разделить эти команды на несколько строк для
удобочитаемость в журнале сборки.
например. У меня есть SConscipt, как:
import os
# create dependency
def my_cmd_generator(source, target, env, for_signature):
return r'''echo its a small world after all \
its a small world after all'''
my_cmd_builder = Builder(generator=my_cmd_generator, suffix = '.foo')
env = Environment()
env.Append( BUILDERS = {'MyCmd' : my_cmd_builder } )
my_cmd = env.MyCmd('foo.foo',os.popen('which bash').read().strip())
AlwaysBuild(my_cmd)
Когда он выполняется, я получаю:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
echo its a small world after all \
its a small world after all
its a small world after all
sh: line 1: its: command not found
scons: *** [foo.foo] Error 127
scons: building terminated because of errors.
Выполнение этого в оболочке python с помощью os.system и os.popen работает - я получаю читаемую командную строку, а процесс под-оболочки интерпретирует все строки как одну команду.
>>> import os
>>> cmd = r'''echo its a small world after all \
... its a small world after all'''
>>> print cmd
echo its a small world after all \
its a small world after all
>>> os.system( cmd)
its a small world after all its a small world after all
0
Когда я делаю это в SCons, он выполняет каждую строку по одной, что
не то, что я хочу.
Я также хочу избежать встраивания моих команд в shell-скрипт и
затем выполнить сценарий оболочки, потому что это создаст строку
избегая безумия.
Возможно ли это?
UPDATE:
cournape,
Спасибо за подсказку о $ CCCOMSTR. К сожалению, я не использую ни один из языков, которые SCons поддерживает из коробки, поэтому я создаю свой собственный генератор команд. Используя генератор, как я могу заставить SCons делать:
echo its a small world after all its a small world after all'
но печать
echo its a small world after all \
its a small world after all