Подтвердить что ты не робот

Разница между Cmake, gnu make и ручной компиляцией

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

Я пытаюсь загрузить и скомпилировать библиотеку, не полагаясь на IDE (в этом случае librocket). Сначала мне пришлось использовать Cmake для создания двоичных файлов. После настройки и генерации я не видел никаких объектных файлов или .cpp файлов в выходной директории. Затем мне пришлось использовать команду gnu make, которая затем создавала как объектные файлы, так и файлы .cpp в выходном каталоге.

Какие шаги от загрузки исходного кода до фактического создания объектных файлов делают Cmake и gnu? В какой момент на самом деле называется компилятор и компоновщик?

Я успешно скомпилировал тестовую библиотеку, которую я написал, а затем скомпилировал другую программу, связанную с ней с помощью g++, но я потерял ее, потому что мне нужно использовать Cmake и gnu make вместо прямого вызова компилятора.

4b9b3361

Ответ 1

Cmake - это "генератор проекта". Он фактически не создает никаких объектных файлов и т.д.; то, что он делает, генерирует управляющие файлы для других инструментов (таких как GNU make), которые будут создавать объектные файлы и т.д.

Преимущество использования cmake вместо написания файла makefile напрямую состоит в том, что, используя тот же самый входной файл cmake, cmake может генерировать файлы проекта для всех видов различных инструментов управления сборками: помимо make файлов он может генерировать Xcode (Mac OS X ) файлы проектов, файлы проектов Microsoft Visual Studio и файлы управления для других инструментов, таких как Ninja. Если вы пишете программное обеспечение, которое должно быть построено на множестве разных платформ, тогда cmake часто является хорошим выбором.

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