эквивалент "прикосновения" в scons?
Scons использует хэши MD5, а не время модуляции файла, чтобы определить, нужно ли создавать зависимость.
Я хочу, чтобы это было поведение по умолчанию. Но есть ли какой-либо способ заставить его предположить, что конкретный файл устарел (эквивалент "прикосновения"), кроме редактирования файла, чтобы сделать его другим?
Edit: пример использования:
Двоичный файл F используется для создания другого файла G с помощью инструмента X. По какой-то причине файл G изменился (он был поврежден, или я его редактировал) или инструмента X изменился, и я хочу воссоздать файл G и все, что ниже по течению от него.
Edit: это только для случайного использования. Я не хочу, чтобы это происходило всегда, только те несколько раз, когда я прошу об этом. Кроме того, я не могу знать конкретный файл заранее. По этой причине я не хочу изменять файлы SConscript/SConstruct для построения конкретного файла. Я бы хотел сделать это в командной строке:
scons {something to specify file foobar.h}
И это заставило бы scons создавать все файлы в зависимости от на фубаре.h, в то время как просто набрав scons
, можно выполнить обычную сборку с использованием хэшей MD5 для проверки зависимостей. Я не возражаю против редактирования файлов SConscript/SConstruct заранее, чтобы разрешить это (пользовательский решатель, я думаю), если есть способ сделать это, который не значительно увеличивает время сборки.
4 ответа:
Я не думаю, что есть способ сделать это напрямую. Если исходный файл, о котором идет речь, имеет один очевидный вывод, такой как
test.o
, созданный изtest.c
, то удалениеtest.o
заставит перекомпилировать исходный файл.Если вместо этого вы хотите коснуться
test.h
, который включен из нескольких различных исходных файлов, вам может быть лучше сделать чистку всего вашего проекта, чтобы гарантировать, что все будет восстановлено.Сказав это, вы, возможно, захотите прочитать о
Decider()
функция что позволяет выбрать способ обработки зависимостей файлов. Вы даже можете выбрать пользовательскую функцию decider для определенных файлов в вашем проекте, так что если у вас есть какой-то глобальный файл заголовка, который вы хотели бы иметь возможностьtouch
и перестроить, вы можете сделать это.Update: чтобы ответить на ваш последний вопрос, просто удалите файл G. Scons воссоздаст его из F, запустив X при следующей сборке.
Я создаю фиктивный целевой файл с полной датой вплоть до часа минуты и секунды. Тогда у меня есть другие шаги, зависящие от этого фиктивного целевого файла. Это изменит значение md5 каждый раз, когда этап сборки перекомпилируется, и приведет к повторной компиляции последующих шагов. В качестве альтернативы вы можете удалить фиктивную цель,и это тоже вызовет повторную компиляцию.
Лично я нахожу это очень полезным, потому что я не могу предсказать все выходные данные с каждого отдельного шага в моем потоке сборки EDA. И не надо Я хочу попытаться спрогнозировать все выходные данные каждого шага сборки из-за затрат на обслуживание.
Я уверен, что функция Decider (), как уже упоминал Грег, больше похожа на scons, но лично мне нравится иметь файлы временных меток.