makefile для компиляции исполняемого файла в сценарии оболочки linux [duplicate]

0

Извиняюсь заранее, я задал аналогичный вопрос раньше, но я не получил четкого ответа, и я в отчаянии, так как я пытался понять его в течение 6 часов без учителя, и, поскольку мои задания сегодня вечером, я просто могу " t возьмите его больше. У меня есть каталог с одним файлом в нем: "proj1.cpp" с большим количеством кода на нем. Мне нужно использовать файл "makefile" в том же каталоге (он называется makefile), чтобы "скомпилировать исполняемый файл: proj1.x". (Я должен сделать это в Linux, кстати, через SSH-оболочку).

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

  • 1
    Пожалуйста, держите язык в чистоте - это семейное шоу! С proj1.x вам нужно создать proj1.x ? Это не обычное расширение в Unix-подобных системах. (Там должен быть какой-то язык, который использует его для своего исходного кода, но исполняемые файлы по умолчанию не имеют никакого расширения.) Если вам нужно только создать proj1 , то вам даже не нужен make-файл. Самым простым способом создания proj1.x может быть однострочный make-файл: proj1.x: proj1; ln -s proj1 proj1.x (вкладки не нужны).
  • 0
    Извините за язык лол. Но спасибо за ответ, я думаю, что наконец-то начал работать !!! Просто надо немного подправить. Также я не знаю, ха-ха, мой профессор потребовал, чтобы я сделал это таким образом.
Показать ещё 1 комментарий
Теги:
makefile

1 ответ

2
Лучший ответ

Вы можете сделать работу очень просто:

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}. Я предпочитаю фигурные фигурные скобки, так что я использую, если нет стандарта кодирования, напротив, но вам сообщили об альтернативе.

Обратите внимание, что исходные файлы и объектные файлы указываются перед библиотеками, если у вас нет оснований для этого.

  • 0
    Хорошо, круто, я заставляю его работать. как включить библиотеки в файл makelist? Это то же самое, что я делаю в обычной программе на С ++?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню