Сборка и запуск проекта с make

Сборка и запуск проекта с 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 для запуска приложения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *