Сборка и запуск проекта с make
Создадим первый проект, состоящий из 2-х файлов main.cpp и makefile (можно создать в nano/kate/pluma) со следующим содержимым.
Что тут делвется — main.cpp просто выводит строчку в консоль
В makefile проверяется создана ли папка bin для объектных файлов, если нет, то создается
компилируется файл main.cpp в bin/main.o
формируется исполняемый файл myAppHello
На самом деле — если побольше покопаться то можно сделать более универсальный код для большего числа файлов.
Файл main.cpp
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
и makefile (без расширений)
со следующим содержимым
CC=g++
BUILD_DIR = bin
# obj_file := $(addprefix bin/, $(addsuffix .o, hello))
build : main.cpp $(BUILD_DIR) #проверка наличия папки bin и ее создание
#формируем объектный файл в папке bin/ и именем main.o
@$(CC) -std=c++14 main.cpp -c -o $(BUILD_DIR)/$(basename $<).o
@echo ">>>>Object file is created"
#формируем исполняемый файл на основе bin/main.o
@$(CC) $(BUILD_DIR)/$(basename $<).o -o myAppHello
@echo ">>>>Executable file is created, you can start myAppHello"
$(BUILD_DIR): #создание папки bin
mkdir -p $@
.PHONY : clean #clean является абстрактной целью
clean:
@rm -rf *.o
@rm -rf $(BUILD_DIR)/*.o
@rm -rf myAppHello
@echo ">>>>Delete *.o and myAppHello"
Использование make
Общий синтаксис:
make [-f makefilename] [target]
makefilename- имя make файла, если не указан – ищется по цепочке GNUmakefile→makefile→Makefile
target- цель в makefile которую необходимо “достичь”.
Если не указана – используется первая в файле.
Сборка и запуск
В командной строке (из папки с makefile) запускаем
make clean для очистки
make build для сборки (или make т.к. build – первая цель)
./myAppHello для запуска приложения