@Unuxlinuxbog

Нужно ли изучать автоматизацию сборки?

Доброй ночи. На сколько я понял make уже не актуален. Используют qmake, cmake. А в некоторых IDE cmake,qmake сами генерируются. Если сейчас все так просто, то нужно разбираться в make/cmake? Чем cmake принципиально лучше make? Посоветуйте хорошую книгу по сборке, пожалуйста. Расскажите пожалуйста про это тему поподробней. Извиняюсь за нубские вопросы. Спасибо
  • Вопрос задан
  • 577 просмотров
Пригласить эксперта
Ответы на вопрос 3
@abcd0x00
Если сейчас все так просто, то нужно разбираться в make/cmake?

Вообще, make - это старое, проверенное средство, которое везде есть. И практика показывает, что когда у тебя есть проект, его надо не только компилировать, но и всячески обслуживать (запускать тесты, чистить ненужные файлы, устанавливать, деустанавливать). И для всего этого может быть сделан всего один Makefile, так как в нём не только сборку можно делать, но и задавать серии команд.
Пример самодельного Makefile
# Build section

CC = gcc
CFLAGS = -ansi -pedantic -Wall

TARGET = ntow
OBJS = main.o noun.o triple.o number.o cmdline.o errors.o input.o

BASEDIR = .
TESTDIR = $(BASEDIR)/tests

# Install section

prefix = /usr/local

PREFIX = $(prefix)
BINDIR = $(PREFIX)/bin

# Rules

all: $(TARGET)

$(TARGET): $(OBJS)
	@$(CC) $(CFLAGS) $^ -o $@ && echo "$(TARGET) has built"

main.o: cmdline.h number.h input.h errors.h
triple.o: triple.h
number.o: number.h
cmdline.o: cmdline.h errors.h

# Commands

help:
	@echo "usage: make [ test | install | uninstall | clean | cleanall ]" 1>&2

test: $(TARGET)
	@$(MAKE) -C $(TESTDIR) run

clean:
	@rm -f $(OBJS) $(TARGET) && echo "$(TARGET) cleaned"

cleanall: clean
	@$(MAKE) -C $(TESTDIR) clean

install:
	install -d $(BINDIR)
	install $(TARGET) $(BINDIR)/$(TARGET)

uninstall:
	rm -f $(BINDIR)/$(TARGET)

.PHONY: help all test clean cleanall install uninstall

Ответ написан
Комментировать
@Ariox41
IDE пока что довольно плохо поддерживают cmake, но ситуация меняется к лучшему. В любом случае не получится использовать его, совсем не зная, разве что для простых случаев.
Что касается преимуществ: основное преимущество cmake в том, что он умеет самостоятельно подставлять флаги для нужного компилятора и умеет искать популярные библиотеки, если заданы соответствующие переменные среды. Последние версии умеют работать с header-only библиотеками. Кроме того, в его составе есть утилиты CPack и CTest. Про CPack ничего сказать не могу, но CTest довольно удобен для тестирования, и его можно сочетать gtest и аналогами.
И я бы не стал пытаться самостоятельно написать make файл для кросплатформенного приложения/библиотеки с тестами и внешними зависимостями, у cmake это лучше получится.
Ответ написан
Комментировать
Olej
@Olej
инженер, программист, преподаватель
На сколько я понял make уже не актуален.

Неправильно поняли.

Чем cmake принципиально лучше make?

CMake только генерирует Makefile для последующего make.
Но не на все случаи и не всегда успешно.
Т.е. он принципиально не лучше, а хуже make.

Посоветуйте хорошую книгу по сборке, пожалуйста.

Здесь: Разработка программных проектов в Linux
И есть отличный полный перевод документации по make, по ссылке выше он указан.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы