Я просто использую текстовый файл со списком всех команд, которые мне нужны для компиляции проекта ...
Это не портативное стандартизированное решение, оно уникально для вашего личного рабочего процесса. 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
, которые одновременно собирают до восьми объектов.