makefile: создать объектный файл, если c-файл существует - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть c-файл, использующий флаг компилятора. Когда флаг компилятора изменяется, я заставляю c-файл обновить его значение в записи make-файла:

compilerflagChange: FORCE
    echo ${CFLAGS} | cmp -s - $@ || echo ${CFLAGS} > $@

myCFile.o: compilerflagChange

Это работает довольно хорошо, за исключением случаев, когда я очищаю весь проект и затем запускаю. В этом случае myCFile.C не был сгенерирован до прихода к оператору

myCFile.o: compilerflagChange

, что приведет к аварийному завершению сборки с ошибкой «MyCfile.C, такой файл отсутствует».

Вопрос: Как я могу сделать свое правило в зависимости от того, существует C-файл или нет? «Если файл существует + cflagChange, обновите файл, в противном случае ничего» * ​​1009 *

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: «Почему бы вам просто не перекомпилировать myCFile.o после того, как каждый раз генерируется MyCFile.c?» Нет подходящего места в make-файле. Для этого мне нужно спуститься на несколько слоев и потерять отслеживаемость причины его восстановления.

1 Ответ

0 голосов
/ 29 апреля 2018

А как насчет создания условий?

ifneq ($(wildcard MyCfile.C),)
myCFile.o: compilerflagChange
endif

Примечание: использование буквенного регистра действительно необычно (myCFile.o против MyCfile.C). Я знаю, что самые популярные операционные системы нечувствительны к регистру, но вы должны серьезно рассмотреть вопрос о более последовательной схеме орфографии. Переносимость, особенно когда она бесплатна, - это хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...