«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как создать несколько исполняемых файлов по одинаковым правилам с помощью GNU Make?

Как создать несколько исполняемых файлов по одинаковым правилам с помощью GNU Make?

Опубликовано 7 ноября 2024 г.
Просматривать:419

 How to Build Multiple Executables with Similar Rules Using GNU Make?

Создание нескольких исполняемых файлов по схожим правилам с использованием GNU Make

Хотя Scons является мощным инструментом сборки, реализация желаемой функциональности может оказаться сложной задачей. Более простой подход — использовать GNU Make, который позволяет легко создавать и очищать как каталоги верхнего уровня, так и отдельные каталоги проектов.

Настройка Makefile

Предоставленные файлы makefile включить сборку и очистку как из каталога all_lessons, так и из каталогов отдельных проектов. Исполняемый файл каждого проекта назван в честь его каталога.

Структура проекта

Чтобы добиться этого, вам необходимо настроить структуру проекта, аналогичную приведенному примеру:

all_lessons/
    helloworld/
        lesson.cpp
        main.cpp
    even_or_odd/
        lesson.cpp
        main.cpp
    calculator/
        lesson.cpp
        user_created_add.cpp
        main.cpp

Содержимое Makefile

project.mk

all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_

Makefile

# project configuration

project_dirs := $(shell find * -maxdepth 0 -type d )
exes := $(foreach dir,${project_dirs},${dir}/${dir})

all : ${exes}

# rules

.SECONDEXPANSION:
objects = $(patsubst %.cpp,%.o,$(wildcard $(dir ${1})*.cpp))

# link
${exes} : % : $$(call objects,$$*) Makefile
    g   -o $@ $(filter-out Makefile,$^) ${LDFLAGS} ${LDLIBS}

# compile .o and generate dependencies
%.o : %.cpp Makefile
    g   -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $<

.PHONY: clean
clean :
    rm -f $(foreach exe,${exes},$(call objects,${exe})) $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d)) ${exes}

# include dependency files
-include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))

Использование

Создание на основе индивидуального Каталоги проектов

[project_directory]$ ln -s ../project.mk Makefile  # create a symlink
[project_directory]$ make

Создание из каталога верхнего уровня

[all_lessons]$ make

Очистка отдельных каталогов проектов

[project_directory]$ cd ..
[all_lessons]$ make clean

Очистка всех проектов

[all_lessons]$ make clean
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3