Каков правильный метод 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 содержит много другого кода, который может изменяться в ходе обычной разработки.