MakeFile не светится как исполняемый - PullRequest
0 голосов
/ 19 февраля 2020

Это код, который я написал в моем make-файле. По какой-то причине он не позволяет мне выполнить функцию make. Когда я набираю «make findName», я получаю «make: 'findName' обновлен».

findName:       findName.cpp
        g++ -g findName.cpp -o findName;

clean:
        /bin/rm -f findName *.o

backup:
        #tar -zcvf bbrown.assignment4_1.tar.gz *.cpp *.h makeFile readme # will make a tar.gz
        tar -cvf bbrown.findName.tar *.cpp *.sh makeFile readme

1 Ответ

1 голос
/ 19 февраля 2020

Сообщение типа "make: 'target' обновлено." означает, что make решил, что ему не нужно запускать какие-либо команды, основываясь на временных метках файлов. Программа make считает, что файлы (и фальшивые цели) имеют дерево предварительных условий, и команды, связанные с созданием файла, будут выполняться, только если файл не существует или имеет более старую временную метку, чем одна из его предпосылок. В больших проектах это помогает избежать полной перестройки всего, что может занять много времени, когда фактически изменилось только несколько исходных файлов: make определит, какие команды действительно необходимы. Но для этого необходимо настроить Makefile с точными предпосылками.

Ваш Makefile указывает, что файл findName имеет одну предпосылку: findName.cpp. Если make успешно создает findName, то вы ничего не делаете, а просто набираете make еще раз, вы увидите сообщение «актуально»: это функция. Если вы редактируете и сохраняете findName.cpp, а затем запускаете make, он должен повторить команду g++.

Но предположим, что у вас также есть некоторые заголовочные файлы из findName.cpp, скажем findName.h. Если вы отредактируете и сохраните findName.h, а затем запустите make, вы получите «обновление», поскольку make не знал, что findName.h влияет на findName. Чтобы исправить это, необходимо добавить обязательное условие:

findName:       findName.cpp findName.h
        g++ -g findName.cpp -o findName

Существуют различные способы автоматического обращения с такими зависимостями заголовка, но они получают более расширенное использование make и / или использование других инструменты для сборки.

...