Makefiles, как я могу их использовать?

^ Это не повторяющийся вопрос ^

Обновлено:

Я довольно новичок в программировании и только сейчас наткнулся на make-файлы.

За последние несколько месяцев я скачал кучу учебников и исходных кодов из разных мест; до сих пор я только использовал решения VS и избегал их.

Я видел несколько способов использования Makefiles в Google, но все они различаются по сложности...

Я понятия не имею о них или о том, как их использовать. Благодарю.

Редактировать (переформулировать):

Подводя итог, из-за очевидной путаницы, мои вопросы (и всегда были):

1) Is there a good tutorial that comes recommended or is it easy to get started with Makefiles?
2) How do you launch and run an existing Makefile? And, 
3) Do Makefiles hold any vital data about the program or could I just use the `.h` and `.cpp` files that come with them in a new solution built from scratch?

3 ответа

Вопрос о том, когда использовать Makefile это вопрос мнения. Конечно, вы можете использовать какой-нибудь альтернативный компоновщик (например, omake, но есть много других). Вам, безусловно, нужна какая-то система построения, как только в вашем программном обеспечении будет более одного модуля перевода. При использовании make Makefile описывает процесс сборки, детализируя зависимости. Зачастую сборка вашей программы выполняется просто make команда.

Некоторые утилиты, например, cmake, qmake, automake и т.д... Makefile генераторы. Они генерируют комплекс Makefile который обычно не использует все возможности GNU make.

Если вы решили использовать make Я рекомендую использовать GNU make (это тоже мнение). В этом случае, внимательно прочитайте его документацию, которую я нахожу вполне читабельной и которая содержит хороший учебник. Не забудьте использовать последнюю версию: версия 4.0 GNU make была выпущена в октябре 2013 года и содержит много интересных новых функций (плагинов и, что наиболее важно, расширяемость через guile), которые интересны для сложных сборок.

Отладить комплекс Makefile -с рассмотреть вопрос об использовании римейка (особенно как remake -x).

На практике в GNU make много встроенных правил. Вы получаете их с make -p; так что используйте их.

Вы также можете выбрать код для POSIX make утилита (которая является стандартной спецификацией, но менее мощная, чем GNU make, которую можно настроить в соответствии со спецификацией POSIX).

Как кодировать Makefile это вопрос вкуса и сложности программного обеспечения. Если у вас есть 2 или 3 *.cc файлы с одним .h общий заголовок, вам не нужны все хитрые трюки (например, автоматические зависимости, как это предусмотрено GCC и make), которые стоит использовать в программном обеспечении из многих сотен исходных файлов (и иногда генерируется исходный код C++, поэтому система сборки должна это знать).

Вот крошечный GNU Makefile чтобы помочь вам:

## file Makefile
CXX= g++
CXXSOURCES= main.cc other.cc
CXXOBJECTS= $(patsubst %.cc, %.o, $(CXXSOURCES))
OPTIMFLAGS= -g -O
PACKAGES= glib-2.0
PKGCONFIG= pkg-config
CXXFLAGS= -std=c++11 -Wall $(OPTIMFLAGS)
CPPFLAGS:=  $(shell $(PKGCONFIG) --cflags $(PACKAGES))
LIBES:= $(shell $(PKGCONFIG) --libs $(PACKAGES)) -ldl
.PHONY: all clean

all: myprog
myprog: $(CXXOBJECTS)
    $(LINK.cc) -rdynamic $^ $(LIBES) -o $@

$(CXXOBJECTS): yourheader.h

clean:
    $(RM) *.o *.so *.orig *~ myprog core* *.hh.gch
## eof Makefile

Я не утверждаю, что это идеальный пример (это не так). Будьте осторожны, таблицы важны для make и я не могу напечатать их выше. Вы будете использовать make all (или просто make) построить свою программу и make clean удалить не исходные файлы.

По непонятным причинам иногда Makefile может быть сгенерирован с помощью autotools или cmake. Для простых программ не стоит учиться тому, как их использовать.

Есть несколько случаев, когда GNU make не имеет смысла или не подходит: в MELT я почти отказался от его использования (вызвав из него какой-то скрипт оболочки, сгенерированный автогеном), потому что это загрузочный язык, где набор файлов C++ генерирует себя из набор MELT-файлов, поэтому у вас есть квазикруговое отношение зависимости от нескольких к нескольким. Возможно, использование расширения GUILE могло бы помочь. Но такие кошмарные ситуации редки.

PS: я ответил как пользователь Linux; не знаю, что применимо - или нет - к Windows, которую я никогда не использую. Смотрите также эти советы о программировании на C или C++ в Linux.

PS2: уместен ответ Пола Эванса: не пишите свой Makefile Скопируйте существующий в соответствии с вашими потребностями.

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

Фундаментальная концепция успеха, когда вы начинаете катиться самостоятельно makefileэто не так! Всегда бери похожий, простой, работающий makefile в качестве шаблона и изменить его в свою собственную сборку. Только после того, как вы начнете работать, вы сможете найти способы улучшить его, сделать его более общим и т. Д. С помощью усердного чтения и изучения. Тогда однажды может прийти в далеком, далеком будущем, где вы можете написать makefile с нуля. Но не разочаровывайтесь, если этот день никогда не наступит.

Другие вопросы по тегам