Как заставить SCONS обновлять содержимое файла, используемого в сборке

Каков правильный метод SCONS для обновления содержимого файла, который является частью сборки?

Я использую SCONS для сборки довольно большого проекта. Но ради простого вопроса предположим, что это выглядит так:

env.Program("foo", ["foo.c", "version.c"])

При определенных условиях сборки необходимо обновить содержимое одного из файлов CPP в сборке новой информацией - фактически информацией о версии. В приведенном выше примере мне нужно изменить содержимое «version.c». Я подумал, что могу сделать это довольно хорошо с помощью следующего примера:

env.Command(target="version.c", source=[], action=PythonFunctionToUpdateContents)
env.Program("foo", ["foo.c", "version.c"])

PythonFunctionToUpdateContents будет использовать target [0] в качестве имени файла, открыть его, найти какой-то конкретный текст, изменить его, записать изменения обратно в тот же файл. К сожалению, приведенный выше образец не работает. SCONS автоматически удаляет целевой файл перед его построением, поэтому мой файл «version.c» был удален до того, как его можно было обновить.

Я попытался установить цель и источник в один и тот же файл в вызове env.Command (), но это просто создает цикл зависимости.

Я знаю, что могу решить эту проблему, если SCONS сгенерирует файл ENTIRE version.c, но это не подходит, поскольку version.c содержит много другого кода, который может изменяться в ходе обычной разработки.

5
задан Jason Swager 21 September 2011 в 18:34
поделиться