Подстановочные знаки и Foreach в Makefile

Podstanovocnye Znaki I Foreach V Makefile



Файл всегда состоит из содержимого разного типа: будь то простой текстовый файл, файл программного кода или любой make-файл. Тип содержимого любого файла делает его уникальным и отличает от файлов другого формата. Точно так же make-файл состоит из правил, которые используют разные элементы для правильного выполнения своей работы. Среди этих элементов есть подстановочный знак и foreach, которые необходимы для выполнения чего-то уникального и дополнительного. В этом руководстве мы обсудим возможности подстановочных знаков и foreach при их использовании в make-файле.

Подстановочные знаки в Makefile

Вообще, wildcard, как известно, является фактором, который невозможно предугадать и который может повернуть ситуацию в любую сторону. Подстановочные знаки в make-файле используются для дополнительного обнаружения всех возможных шаблонов из текущего рабочего каталога, будь то файл или любая папка. Эти исходные файлы могут быть любого типа.







Чтобы использовать подстановочный знак в make-файле, вам следует использовать ключевое слово «подстановочный знак», которое следует за звездочкой «*» или «?» знак и расширение файла, которое связано через точку. Вы также можете использовать знак «?» знак для поиска одного символа и «*» для поиска любого количества символов. Вся эта структура должна использоваться в скобках и знаке «$». Например, мы объявляем переменную «SRCS», которая получает файл значения через подстановочный знак. Этот подстановочный знак ищет все файлы с шаблоном «cpp» в конце.





Foreach в Makefile

Функция foreach в makefile работает точно так же, как цикл foreach в языках программирования — перебирает элементы в списке. Функция foreach в makefile выполняет определенное действие над каждым элементом списка. Этот элемент может быть переменной или любым исходным файлом. Например, мы уточняем синтаксис функции foreach в makefile через переменную SOURCES, которая содержит список из трех исходных файлов. Функция foreach использует эту переменную SOURCES для создания одного и того же имени для трех объектных файлов путем повторения списка исходных файлов и сохранения их в другой переменной «OBJECTS». Последние две строки показывают, как можно использовать правило make-файла для создания объектного файла для каждого файла C после итерации.





ИСТОЧНИКИ := file1.c file2.c file3.c
ОБЪЕКТЫ := $ ( foreach исходный код,$ ( ИСТОЧНИКИ ) ,$ ( источник:.c=.o ) )
$OBJECTS : % .О: %
$ ( СС ) $ ( КФЛАГИ ) $ < $ @

Пример 1. Использование подстановочных знаков

Чтобы отобразить иллюстрацию и работу подстановочных знаков и функций foreach, мы представляем файл C++. Этот файл «salary.cpp» запускается с использованием заголовка «iostream», чтобы обеспечить плавное использование входных и выходных потоков. Основной метод объявляет переменную «s» целочисленного типа и оператор «cout», чтобы запросить входное значение во время выполнения. Стандартный поток ввода «cin» получает значение от пользователя во время выполнения и сохраняет его в переменную «s». «cout» отображает введенное пользователем значение на экране консоли.

#include
использование пространства имен std;
int главный ( ) {
интервал с;
расчет << «Введите зарплату:» ;
принимать пищу >> с;
расчет << ' \п Зарплата: ' << с << конец;
возвращаться 0 ;
}



Мы начинаем make-файл с переменной «CXX», которая определяет компилятор C++, а переменная CXXFLAGS содержит флаги компилятора C++. Переменная EXECUTABLE содержит имя исполняемого файла «hello», который создается после выполнения make-файла. Переменная SRCS получает все файлы C++ из текущего каталога, используя подстановочный знак «*» для поиска любого шаблона, который заканчивается на «.cpp». Переменная OBJS содержит имена объектных файлов, которые будут созданы с использованием переменной SRCS, заменяя расширение «cpp» на «o». Цель по умолчанию «все» создает make-файл и зависит от переменной EXECUTABLE.

Первое правило создает целевой файл «hello», который зависит от объектного файла переменной OBJS (имена объектных файлов), используя имена файлов, сгенерированные с помощью переменной «OBJS». Второе правило make-файла создает объектный файл с расширением «.o», который зависит от файла C++, после компиляции файла кода C++. Здесь «%» — это подстановочный знак для поиска имен файлов по любому шаблону, который заканчивается на «cpp». В конце концов, цель очистки использует команду «rm» для принудительной очистки вновь созданных исполняемых и объектных файлов из каталога с использованием флага «-f».

СХХ = г++
CXXFLAGS = -Стена -стандартный =С++ одиннадцать
ИСПОЛНЯЕМЫЙ = привет
СРКС = $ ( подстановочный знак * .cpp )
ОБЖС = $ ( SRCS:.cpp=.o )
все: $ ( ИСПОЛНЯЕМЫЙ )
$ ( ИСПОЛНЯЕМЫЙ ) : $ ( ОБЖС )
$ ( СХХ ) $ ( CXXFLAGS ) $ @ $ ( ОБЖС )
% .О: % .cpp
$ ( СХХ ) $ ( CXXFLAGS ) $ < $ @
чистый:
РМ $ ( ИСПОЛНЯЕМЫЙ ) $ ( ОБЖС )

После выполнения инструкции make были созданы целевой и объектный файлы. После выполнения исполняемого файла «hello» пользователю предлагается ввести зарплату и мы добавляем «67000». В конце зарплата отображается обратно.

делать

Пример 2: Использование Foreach

После использования подстановочных знаков пришло время воспользоваться функцией foreach в make-файле. Остальная часть кода make-файла такая же. В строке 6 мы инициализируем еще одну переменную «NAMES» со списком из трех значений — Кейт, Ким, Тим. Цель по умолчанию «все» зависит от переменной EXECUTABLE (имя целевого файла «hello») и оператора foreach. Функция «addprefix» повторяет переменную «NAMES» для динамического создания целевых имен, добавляя префикс «run_» в начале каждого имени в списке «NAMES».

Правило в восьмой строке указывает, что выходной исполняемый целевой файл, то есть hello, зависит от «OBJS». Флаг «-o» генерирует целевой выходной файл с использованием OBJS. Правило в десятой строке генерирует целевой объектный файл, используя исходные файлы с расширением «cpp». Для этого используется флаг «-c» для компиляции исходного файла и создания связанного объектного файла, необходимого для генерации целевого объекта. В тринадцатой строке мы используем переменную EXECUTABLE для генерации вывода с разными именами, начинающимися с префикса «run_». В конце концов, чистая цель и цели-фальшивки удалят и очистят объект и целевые файлы.

СХХ = г++
CXXFLAGS = -Стена -стандартный =С++ одиннадцать
# исполняемый целевой файл
ИСПОЛНЯЕМЫЙ = привет
СРКС = $ ( подстановочный знак * .cpp )
ОБЖС = $ ( SRCS:.cpp=.o )
# Список имен
ИМЕНА = Кейт Ким Тим
# целей
все: $ ( ИСПОЛНЯЕМЫЙ ) $ ( addprefix run_, $ ( ИМЕНА ) )
$ ( ИСПОЛНЯЕМЫЙ ) : $ ( ОБЖС )
$ ( СХХ ) $ ( CXXFLAGS ) $ @ $ ( ОБЖС )
% .О: % .cpp
$ ( СХХ ) $ ( CXXFLAGS ) $ < $ @
# Создайте цели для каждого имени
бегать_ % : $ ( ИСПОЛНЯЕМЫЙ )
. / $ ( ИСПОЛНЯЕМЫЙ ) $*
чистый:
РМ $ ( ИСПОЛНЯЕМЫЙ ) $ ( ОБЖС )
# Фальшивые цели
.PHONY: все чисто

Использование инструкции make генерирует исполняемый целевой файл hello и запускает программу для каждого имени, указанного в переменной NAMES.

делать

Вы также можете изменить свой вывод, используя имя из списка с префиксом «run_».

Заставь бежать_Ким

Заключение

В этом руководстве обсуждается использование подстановочных знаков и концепций foreach в make-файле, а их синтаксис обсуждается отдельно. После этого мы обсудили примеры кода, чтобы подробно описать каждый из них, работая с выходными данными при получении файлов с одинаковыми расширениями и переборе значений в списке переменных.