преимущества использования make и Cmake вместо компиляции из командной строки? - PullRequest
0 голосов
/ 30 апреля 2018

Я всегда компилировал весь свой код C ++ под G ++ из командной строки.

Почему люди используют такие вещи, как Cmake и GCC Make, и каковы преимущества?

Как я могу преобразовать мои проекты в использование make-файлов, если на самом деле есть причина?

Прямо сейчас, я просто использую текстовый файл со списком всех команд, которые мне нужны для компиляции проекта по частям, и, конечно, ту, которая компилирует весь проект, если я хочу перекомпилировать каждый файл c и cpp .

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Использование текстового файла со списком всех команд, которые мне нужны для компиляции проекта - это один шаг на пути к управляемой сборке.

Давайте определим следующие уровни улучшения сборки:

  1. Компилировать каждый файл каждый раз, зависимости неизвестны
  2. Кластеризация файлов по блокам или библиотекам для сборки только в случае необходимости
  3. Создайте файл описания сборки и используйте make или nmake
  4. Используйте файл описания кроссплатформенной сборки и cmake
  5. Используйте IDE, которая может создать ваш проект на основе файла cmake

Я использую уровень 1 для простых демонстраций проблем и решений. Но в своих проектах я работаю на 5 уровне всегда. И, кажется, вы находитесь на переходе с уровня 2 на уровень 3.

0 голосов
/ 30 апреля 2018

Я просто использую текстовый файл со списком всех команд, которые мне нужны для компиляции проекта ...

Это не портативное стандартизированное решение, оно уникально для вашего личного рабочего процесса. A Makefile или CMakefile позволяет вам описать, как скомпилировать ваш код для компьютеров , а не для людей, чтобы другие люди могли запустить простую команду или две и (надеюсь) получить те же результаты, что и вы .

Ваш подход может сработать сейчас, но для нетривиального проекта с тысячами исходных файлов, сотнями тысяч сложных взаимозависимостей и требующими часов компиляции вам потребуется автоматизация.

Например, ваш текстовый файл может иметь:

 g++ input.cpp output -lstdc++

Это самый тривиальный случай: один исходный файл, один выходной файл, одна библиотека. В нетривиальном коде команды выглядят так:

g++ -m32 -c -g -Wall -Iinclude -Isrc -I../Perlingo\ Shared\ Objects -include include -fPIC  -MMD -MP -MF "build/Debug/GNU-Linux-x86/src/BhamEvent.o.d" -o build/Debug/GNU-Linux-x86/src/BhamEvent.o src/BhamEvent.cpp

Это просто вкус к тому, сколько флагов и опций вам может понадобиться включить для правильной компиляции. Некоторые из этих путей являются переменными, хранящимися в Makefile, или помещаются туда с помощью таких инструментов, как cmake или configure.

Также одним из лучших преимуществ Makefile является то, что вы можете выполнять параллельные сборки с флагами, такими как -j8, которые одновременно собирают до восьми объектов.

...