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