2012-05-25 3 views
0

Странная вещь происходит:Makefile не обнаруживает новый СОХРАНИТЬ

Идея Makefile, чтобы иметь возможность компилировать несколько файлов одновременно. Если вы редактируете один из этих файлов, когда вы вводите make, единственным файлом, который следует скомпилировать, является тот, который был отредактирован.

Теперь по какой-то причине мой make-файл решил прекратить распознавать, когда файл был изменен. Поэтому я должен: make clean и make снова быть в состоянии скомпилировать, что смешно, так как каждый раз, когда мне приходится скомпилировать, требуется около 1 минуты.

Любые идеи, почему это происходит?

Я ничего не добавлял в свой файл makefile; он только начал делать это из ниоткуда.

+0

Что-то изменилось; программы не прекращают работать, если что-то не изменится. Трудность будет заключаться в том, что изменилось. Вы всегда можете просто набрать 'rm file-that-changed.o; make' перестроить только один файл, который изменился, но это неприятность. Есть многоступенчатая компиляция, и у вас есть промежуточный файл, лежащий вокруг, что запутывает 'make'? Вы должны уменьшить это до простого make-файла с двумя исходными файлами, один из которых не перекомпилируется и один из них делает. Покажите нам это и каталог, в котором перечислены только эти файлы. Вероятно, вы разрешите свою проблему перед публикацией. –

+0

Спасибо jonathan! да, я просто немного перепутал в мульти-setp компиляции.Думаю, я немного устал после стольких часов работы. – Alessandroempire

ответ

2

Что-то изменилось; программы не прекращают работать, если что-то не изменится. Трудность будет заключаться в том, что изменилось. Вы всегда можете просто ввести:

rm file-that-changed.o 
make 

Чтобы восстановить только тот файл, который изменился, но это неприятность.

Есть многоступенчатая компиляция, и у вас есть промежуточный файл, лежащий вокруг, что запутывает make?

У меня просто было смешение в многоэтапной компиляции.


Если у вас есть нестандартный суффикс файла, который вы компилировать в код C, а затем из C в объектный код (или любой другую аналогичную многоэтапной компиляцию), то ключ к получению надежного перекомпиляции с make - это упорядочить список суффиксов, чтобы ваши расширения были в начале. К сожалению, не существует стандартный простой способ узнать, что встроенный в список суффикс, так что вы в конечном итоге, сделать что-то вроде этого:

SUFFIXES  = .y .l .c .o  # Yacc, Lex, C, Object files 
EXTRA_SUFFIX = .xc    # Extreme C, or Extended C, or ... 

.SUFFIXES:      # Eliminate all built-in suffixes 
.SUFFIXES: ${EXTRA_SUFFIX} ${SUFFIXES} 

Вторая линия .SUFFIXES ставит ваше расширение в передней части список. Теперь вы можете написать свои правила, чтобы скомпилировать файл .xc в .c или .o файл, а затем, когда вы изменяете файл .xc, даже если есть промежуточный .c файл разбрасывал, тот факт, что .xc новее, чем файл .c или .o обеспечит перекомпиляцию.

Когда-то давно версия Sun make предоставила макрос под названием SUFFIXES, который содержал суффиксы по умолчанию в правильном порядке. К сожалению, это не было принято и стандартизовано, поэтому вам нужно самостоятельно составить список суффиксов. Но выбор имени макроса был не совсем случайным.

+0

Спасибо. Я не знал, что порядок списка суффиксов важен. –

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