Начало работы с Makefile для C ++ (CMake или GNUMake?)

У меня есть мой первый проект на этот семестр, и меня попросили представить его с make-файлом. Литература, доступная в Интернете, немного подавляющая, и в сочетании с моей ленью я пришел к stackoverflow для простых ответов. я нашел этот ответ от Брендан Лонг как хорошее место для начала.

Пример, который он приводит:

all: a3driver.o
g++ -o a3driver a3driver.o

a3driver.o: a3driver.cpp
g++ -c a3driver.cpp

что я понимаю. Это выглядит точно так же, как make-файлы, которые я видел в системе Unix и которые я использовал для компиляции файлов c ++ (используется только, понимать не нужно).

Затем я ищу дальше и отвечаю этот вопрос предлагает использовать CMake, который полностью отличается от кода, который я вставил выше.

Итак, мой вопрос на данном этапе: в каком направлении мне идти? Должен ли я узнать о CMake или GNUMake? Я только собираюсь сейчас работать с файлами C ++.

1

Решение

Только вы можете ответить на этот вопрос, потому что он сильно зависит от ваших потребностей. Cmake — это «генератор файлов управления сборкой», а не программа управления сборкой. На самом деле он не создает код: вместо этого он создает make-файл или файл проекта Visual Studio / Xcode / Eclipse и т. Д. Затем вы используете эту программу сборки (make, Visual Studio, XCode, Eclipse) для фактической сборки кода.

Cmake хорош, если вам нужно поддерживать все эти различные типы сборок во всех этих различных архитектурах, используя их собственные среды сборки. Если вы счастливы использовать make на любой архитектуре, на которой вам нужно опираться (GNU make работает и на всех этих средах, и на всех этих IDE, за исключением, возможно, Visual Studio, хорошо интегрирующихся с native make), тогда лучше использовать make напрямую. GNU make обладает множеством расширенных функций, которые делают его очень гибким.

Я не очень согласен с оценкой автоинструментов от esseks, хотя знаю, что это очень распространенное мнение. Также обратите внимание, что само automake не использует необычный, подробный синтаксис: файлы automake — просто make-файлы. Однако они должны быть обработаны, и autoconf — это то, как это делается … autoconf более неясен, хотя и не так плох, как думают люди, в зависимости от ваших потребностей. Однако это не место для этого обсуждения.

Лично я нахожу формат cmake еще более раздражающим и странным, чем autotools, и он во многих отношениях не отвечает моим потребностям (например, его поддержка кросс-компиляции не так хороша, как autotools). Однако я должен сказать, что его способность генерировать собственные файлы проекта действительно превосходна — если вам это нужно.

1

Другие решения

Если вам нужен действительно очень простой простой make-файл для компиляции только одного или нескольких файлов, то вы закончили с:

compile:
g++ myprogram.cpp -o myprogram

(обратите внимание, что строки должен иметь отступ с табуляцией, а не пробелами).

Если вам нужна гибкость, вы на правильном пути с CMake. Я предлагаю вам изучить CMake, начиная с их хорошего учебника или простого примера — поскольку основы проще понять из кода, чем учиться из руководства.

Мой личный выбор — избегать GNU Automake (в народе известный как Autohell) из-за необычного, многословного синтаксиса, который иногда пугает начинающих и обманывает более опытных пользователей.

РЕДАКТИРОВАТЬ: CMake не используется для компиляции, скорее, он может генерировать makefiles для вас, начиная с синтетического описания проекта (где должны быть скомпилированы файлы? какие библиотеки требуются? и т. д.). И делает это, проверяя библиотеки, идентифицируя компилятор и выполняя другие проверки работоспособности, которые в противном случае вам понадобится кодировать самостоятельно.

1

По вопросам рекламы [email protected]