2016-04-04 3 views
0

У меня есть файлы журналов, сгенерированные после компиляции каждого файла.SCons Игнорировать функцию не работает

Я заставляю SCons знать об этих файлах с помощью эмиттера, прикрепленного к строителю, который я использую для компиляции этого файла.

К сожалению, поскольку я удаляю пустые файлы журналов после каждой сборки, SCons перекомпилирует исходные файлы, поскольку файлы журнала отсутствуют.

Я хотел бы проигнорировать эти файлы «побочного эффекта», используя функцию «Игнорировать функции».

В моем эмиттер я делаю что-то вроде этого:

def compiler_emitter(target, source, env): 
target.append(env.File(source[0].name.split('.')[0] + env['ERRSUFFIX']))  
env.Ignore(source[0], target[1])  
return target, source 

В ноте я всегда проходит только один файл в мой строитель.

В моем случае функция Игнорировать не работает.

Каким будет наилучший подход для решения этой проблемы в режиме «Скинсон»?

+0

Я не понимаю, почему вы сначала добавить дополнительные файлы журнал/ошибка в вашем излучателе, но хочет «игнорировать» их. Если они не важны для вашей сборки, просто не сообщайте об этом Эмитенту. Это был бы мой подход, по крайней мере ... – dirkbaechle

ответ

1

Попробуйте использовать env.SideEffect() вместо того, чтобы игнорировать:

SideEffect (side_effect, цель), env.SideEffect (side_effect, мишень)

Объявляет side_effect как побочный эффект строительства цель. Параметр side_effect и target может быть как , так и списком, именем файла или узлом. Сторона Эффект - это целевой файл, который создается или обновляется как побочный эффект , создающий другие цели. Например, файл Windows PDB создается как побочный эффект создания файлов .obj для статической библиотеки, а различные файлы журналов создаются обновленными как побочные эффекты различных команд TeX . Если цель является побочным эффектом нескольких команд сборки, то scons гарантирует, что за один раз выполняется только один набор команд. Следовательно, вам нужно использовать этот метод только для целей побочного эффекта , которые построены в результате нескольких команд сборки.

Поскольку несколько команд сборки могут обновлять один и тот же файл побочных эффектов, по умолчанию цель side_effect не удаляется автоматически, когда цель удаляется параметром -c. (Обратите внимание, однако, что side_effect может быть удален как часть очистки каталога в , который он проживает.) Если вы хотите убедиться, что side_effect очищен всякий раз, когда убирается конкретная цель, вы должны указать это явно с помощью функция Clean или env.Clean.

http://scons.org/doc/production/HTML/scons-man.html

Смежные вопросы