Зависимости в make-файле - PullRequest
0 голосов
/ 02 августа 2009

У меня есть make-файл, и фрагмент выглядит так (файлы и цели переименованы для ясности):

target1 : OtherLib.o MyProg.h MyProg.cpp
    g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o

Когда я запускаю 'make target1', я хочу, чтобы make проверил, что MyProg.h и MyProg.cpp обновлены, и запустим target1, если нет. Тем не менее, я получаю сообщение об ошибке

make: *** No rule to make target `MyProg.cpp', needed by `target1'. Stop.

Но «MyProg.cpp» - это то, что я пытаюсь скомпилировать! Итак, я сделал для нее пустую цель, например:

MyProg.h :
MyProg.cpp :
target1 : OtherLib.o MyProg.h MyProg.cpp
    g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o

Это работает, но кажется странным. У меня сложилось впечатление, что если я сделаю это просто:

target1 : OtherLib.o
    g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o

тогда MyProg будет скомпилирован независимо от того, обновлен он или нет, потому что MyProg.cpp не указан в качестве зависимости. Как правильно сделать это, чтобы make скомпилировал MyProg.o, только если MyProg.cpp и MyProg.h не обновлены?

Ответы [ 3 ]

2 голосов
/ 02 августа 2009

Я не могу воспроизвести вашу проблему. Вы можете попробовать запустить make с опцией -d, чтобы получить очень подробную историю того, что пытается сделать make. Я думаю, что по какой-то причине он смотрит в неправильный каталог.

2 голосов
/ 02 августа 2009

Не похоже, что это должно произойти. Возможно, вам следует тщательно проверить орфографическую ошибку. Если ваша ОС скрывает от вас расширения файлов, я бы с подозрением относился к этому.

0 голосов
/ 03 августа 2009

Я думаю, что поскольку не генерируется ни один исполняемый файл с именем target1, ваша цель target1 фактически будет фиктивной, и соответствующие команды всегда будут выполняться. Так что ваш код будет скомпилирован в любом случае.
Хотя я также не могу воспроизвести вашу проблему: нет правила для создания цели `MyProg.cpp '

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