Извиняюсь заранее, я задал аналогичный вопрос раньше, но я не получил четкого ответа, и я в отчаянии, так как я пытался понять его в течение 6 часов без учителя, и, поскольку мои задания сегодня вечером, я просто могу " t возьмите его больше. У меня есть каталог с одним файлом в нем: "proj1.cpp" с большим количеством кода на нем. Мне нужно использовать файл "makefile" в том же каталоге (он называется makefile), чтобы "скомпилировать исполняемый файл: proj1.x". (Я должен сделать это в Linux, кстати, через SSH-оболочку).
Я был бы очень признателен, если бы кто-нибудь мог мне пройти шаг за шагом пошаговым инструкциям, как/зачем делать это для моей ситуации, а не просто перенаправлять меня на другую страницу? Я только спрашиваю, потому что я знаю, что решение легко опытному программисту.
Вы можете сделать работу очень просто:
proj1.x: proj1.cpp
${CXX} ${CXXFLAGS} -o $@ proj1.cpp
Это две строки makefile
. В начале второй строки должен быть Tab. В первой строке указано, что proj1.x
зависит от proj1.cpp
; если proj1.cpp
новее, чем proj1.x
(или proj1.x
не существует), то выполняйте действия во второй строке. Вторая строка запускает компилятор C++ для создания proj1.x
(что $@
; вы можете написать proj1.x
там, если хотите, хотя в конечном итоге $@
лучше). Я предполагаю, что ваш make
использует ${CXX}
${CXXFLAGS}
для компилятора C++ и ${CXXFLAGS}
для параметров компилятора. Если вам нужны дополнительные библиотеки, вы можете добавить их. И т.п.
Это полностью готовый makefile
. Вероятно, вы пойдете. (Кстати, 188 строк кода мало.)
Добавление библиотек:
LDFLAGS = -L …
LDLIBS = -lxyz -lpqr
proj1.x: proj1.cpp
${CXX} ${CXXFLAGS} -o $@ proj1.cpp ${LDFLAGS} ${LDLIBS}
Обратите внимание, что многие (возможно, большинство) людей используют альтернативную нотацию $(VAR)
предпочитая ${VAR}
. Я предпочитаю фигурные фигурные скобки, так что я использую, если нет стандарта кодирования, напротив, но вам сообщили об альтернативе.
Обратите внимание, что исходные файлы и объектные файлы указываются перед библиотеками, если у вас нет оснований для этого.
proj1.x
вам нужно создатьproj1.x
? Это не обычное расширение в Unix-подобных системах. (Там должен быть какой-то язык, который использует его для своего исходного кода, но исполняемые файлы по умолчанию не имеют никакого расширения.) Если вам нужно только создатьproj1
, то вам даже не нужен make-файл. Самым простым способом созданияproj1.x
может быть однострочный make-файл:proj1.x: proj1; ln -s proj1 proj1.x
(вкладки не нужны).