Вызов функции внутри действия SCons Builder - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь написать Builder в SCons для вызова исполняемого файла командной строки с некоторыми аргументами, которые генерируются (рядом) функций python.

cmdVars = Variables(None, ARGUMENTS)
cmdVars.AddVariables(
    EnumVariable('DEBUG', 'help for debug', 'a', allowed_values=('a','b','c')),
    PathVariable('CLI', 'path to cli exe', 'C:\...\blah.exe', PathVariable.PathIsFile)
)

env = Environment(variables = cmdVars)

def generateSomeExtraBitsDependingOnFlag(debug):
    if (debug == 'a'):
         return "-DDEBUG -DBlah myTextHere"
    return ''

myBuilder = Builder(
    action = '"$CLI" generateSomeExtraBitsDependingOnFlag("$DEBUG")'
)

<extra stuff to add myBuilder to env and call env.myBuilder>

Вход «$ CLI» правильно подставлен в вывод (при вызове scons) что-то вроде C:\Program Files\...\blah.exe, но вывод из функции никогда не появляется, независимо от настройки DEBUG.

Перед добавлением print(debug) внутри функции печатается $DEBUG во время анализа файла SConstruct (поэтому неудивительно, что он не соответствует условию if).

Нужно ли просто использовать Генератор или следовать инструкциям в главе 18.4 ( Построители, которые выполняют функции Python ), чтобы сделать эту работу? Является ли раздел Написание построителей, выполняющих внешние команды не тем, что я хочу здесь?

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

1 Ответ

1 голос
/ 02 апреля 2019

Попробуйте это:

cmdVars = Variables(None, ARGUMENTS)
cmdVars.AddVariables(
    EnumVariable('DEBUG', 'help for debug', 'a', allowed_values=('a','b','c')),
    PathVariable('CLI', 'path to cli exe', 'C:\...\blah.exe', PathVariable.PathIsFile)
)

env = Environment(variables = cmdVars)

def generateSomeExtraBitsDependingOnFlag(source, target, env, for_signature):
    if (env['DEBUG'] == 'a'):
         return "-DDEBUG -DBlah myTextHere"
    return ''


env['generateSomeExtraBitsDependingOnFlag'] =generateSomeExtraBitsDependingOnFlag

myBuilder = env.Builder(
    action = '"$CLI" ${generateSomeExtraBitsDependingOnFlag}'
)

env.Append(BUILDERS = {'myBuilder' : myBuilder})

env.myBuilder('dummy','input')
...