GNU Make Incremental Build: Принудительная пересборка определенного файла

Я использую Eclipse (Juno) + CDT в Windows 7 для управления GCC с автоматическим созданием файла makefile. Работал отлично, пока я не использовал макросы препроцессора __DATE__ и __TIME__ GCC, чтобы добавить дату/временную метку сборки в файл заголовка конфигурации моего проекта.

При чистой сборке эти макросы прекрасно работают, но при инкрементной сборке Make не перестраивает связанный объектный файл; он просто переходит прямо к ссылке.

Я попытался сделать Windows-эквивалент touch в качестве шага перед сборкой (описано здесь: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command), но Make по-прежнему пропускает файл. Также пытался «тронуть» исходный файл, содержащий заголовок; до сих пор нет кости.

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


person mtbkrdave    schedule 23.08.2013    source источник
comment
Попытался использовать параметр командной строки --assume-new для создания как заголовка, так и включающего C-файла, но безуспешно.   -  person mtbkrdave    schedule 24.08.2013


Ответы (2)


Отметьте заголовок как .PHONY. Это гарантирует, что он всегда будет считаться устаревшим:

.PHONY: particular_header.h
person Robert Jørgensgaard Engdahl    schedule 23.08.2013
comment
Спасибо. Поскольку Makefile генерируется автоматически, есть ли способ настроить это в настройках сборки CDT? - person mtbkrdave; 24.08.2013

Оказывается, мне нужно было удалить объектный файл в качестве шага перед сборкой, как описано здесь:

Принудительно очищать файл makefile Eclipse CDT перед компиляцией ( возможно, это дубликат этого вопроса)

person mtbkrdave    schedule 23.08.2013