Заместващи символи и Foreach в Makefile

Zamestvasi Simvoli I Foreach V Makefile



Файлът винаги е съставен от различен тип съдържание: независимо дали е обикновен текстов файл, файл с програмен код или произволен makefile. Типът съдържание на всеки файл го прави уникален и го отличава от другите формати на файлове. Точно така, makefile се състои от правила, които използват различни елементи, за да изпълняват работата си правилно. От тези елементи има заместващия знак и foreach, които са необходими за изпълнение на нещо уникално и допълнително. В това ръководство ще обсъдим силата на заместващите символи и foreach, докато се използват в makefile.

Заместващи символи в Makefile

Като цяло се знае, че заместващият знак е фактор, който не може да бъде предвиден и може да обърне ситуацията по всякакъв възможен начин. Заместващите символи в makefile се използват за извършване на бонус за откриване на всички възможни шаблони от текуща работна директория, независимо дали е файл или която и да е папка. Тези изходни файлове могат да бъдат от всякакъв тип.







За да използвате заместващ знак в makefile, трябва да използвате ключовата дума „заместващ знак“, която следва звездичката „*“ или „?“ знак и файловото разширение, което е свързано чрез точка. Можете също да използвате '?' знак за търсене на един знак и „*“ за съвпадение на произволен брой знаци. Цялата тази структура трябва да се използва в скобите и знака „$“. Например, ние декларираме променливата „SRCS“, която получава своя файл със стойност чрез заместващия знак. Този заместващ знак търси всички файлове с модела „cpp“ в края.





Foreach в Makefile

Функцията foreach на makefile работи точно като цикъл foreach в езиците за програмиране – итерация върху елементите в списък. Функцията foreach в makefile изпълнява конкретно действие върху всеки елемент от списък. Този елемент може да бъде променлива или произволен изходен файл. Например, ние разработваме синтаксиса на функцията foreach в makefile чрез променливата SOURCES, която съдържа списък от три изходни файла. Функцията foreach използва тази променлива SOURCES, за да създаде едно и също име за три обектни файла, като итерира списъка с изходни файлове и ги записва в друга променлива „OBJECTS“. Последните два реда показват как може да се използва правило за makefile за създаване на обектен файл за всеки C файл след повторение.





ИЗТОЧНИЦИ := file1.c file2.c file3.c
ОБЕКТИ := $ ( foreach src,$ ( ИЗТОЧНИЦИ ) ,$ ( src:.c=.o ) )
$ОБЕКТИ : % .О: % .° С
$ ( CC ) $ ( CFLAGS ) -° С $ < $ @

Пример 1: Използване на заместващи символи

За да покажем илюстрацията и работата на заместващи символи и функции foreach, въвеждаме C++ файл. Този файл „salary.cpp“ се стартира с помощта на заглавката „iostream“, за да позволи плавно използване на входни и изходни потоци. Основният метод декларира променлива „s“ от целочислен тип и оператора „cout“, за да поиска входна стойност по време на изпълнение. Стандартният входен поток „cin“ получава стойността от потребител по време на изпълнение и я записва в променливата „s“. „Cout“ показва въведената стойност от потребител на екрана на конзолата.

#include
използване на пространство от имена std;
int main ( ) {
int s;
cout << „Въведете заплата:“ ;
храня се >> с;
cout << ' Заплата: ' << с << endl;
връщане 0 ;
}



Стартираме make-файла с променливата “CXX”, която дефинира компилатора за C++, а променливата CXXFLAGS съдържа флаговете за компилатора на C++. Променливата EXECUTABLE съдържа името на изпълним файл „hello“, който се генерира след изпълнението на makefile. Променливата SRCS получава всички C++ файлове от текуща директория, използвайки заместващия знак „*“, за да търси всеки шаблон, който завършва с „.cpp“. Променливата OBJS съдържа имената на обектните файлове, които трябва да бъдат създадени с помощта на променливата SRCS, заменяйки разширението „cpp“ с „o“. По подразбиране целта „всички“ изгражда make-файла и зависи от променливата EXECUTABLE.

Първото правило създава целевия файл „здравей“, който зависи от променливата OBJS (имена на обектни файлове) обектен файл, използвайки имената на файловете, които се генерират чрез променливата „OBJS“. Второто правило за makefile генерира обектния файл с разширението „.o“, което зависи от C++ файла след компилирането на C++ кодовия файл. Тук „%“ е заместващ знак за търсене на имената на файловете на всеки модел, който завършва с „cpp“. В крайна сметка чистата цел използва своята команда „rm“, за да изчисти принудително новогенерираните изпълними и обектни файлове от директория, използвайки флага „-f“.

CXX = g++
CXXFLAGS = -Стена -стандартно =c++ единадесет
ИЗПЪЛНИТЕЛ = здравей
SRCS = $ ( заместващ знак * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
всички: $ ( ИЗПЪЛНИМ )
$ ( ИЗПЪЛНИМ ) : $ ( OBJS )
$ ( CXX ) $ ( CXXФЛАГИ ) $ @ $ ( OBJS )
% .О: % .cpp
$ ( CXX ) $ ( CXXФЛАГИ ) -° С $ < $ @
чисто:
rm -f $ ( ИЗПЪЛНИМ ) $ ( OBJS )

При изпълнение на инструкцията „make“ бяха създадени както целевият, така и обектният файл. След изпълнение на изпълнимия „hello“ файл, потребителят е помолен да въведе заплата и ние добавяме „67000“. Накрая се показва обратно заплатата.

направи

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

След като използвате заместващи символи, е време да използвате функцията foreach в makefile. Останалата част от кода на makefile е същата. На ред 6 инициализираме друга променлива, която е „NAMES“ със списък от три стойности – Kate, Kim, Tim. Целта по подразбиране „всички“ зависи от променливата EXECUTABLE (име на целевия файл „hello“) и оператора foreach. Функцията „addprefix“ итерира променливата „NAMES“, за да генерира динамично целевите имена чрез префикс „run_“ в началото на всяко име в списъка „NAMES“.

Правилото на осмия ред показва, че изходен изпълним целеви файл, т.е. hello, зависи от „OBJS“. Флагът „-o“ генерира целевия изходен файл с помощта на OBJS. Правилото на десетия ред генерира целевия обектен файл, като използва изходните файлове с разширение „cpp“. За да направите това, флагът „-c“ се използва за компилиране на изходен файл и генериране на свързания обектен файл, който е необходим за целевото генериране. На тринадесетия ред използваме променливата EXECUTABLE, за да генерираме изхода с различни имена, започващи с „run_“ като префикс. В крайна сметка чистата цел и целите Phony ще премахнат и почистят обекта и целевите файлове.

CXX = g++
CXXFLAGS = -Стена -стандартно =c++ единадесет
# изпълним целеви файл
ИЗПЪЛНИТЕЛ = здравей
SRCS = $ ( заместващ знак * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# Списък с имена
ИМЕНА = Кейт Ким Тим
# Цели
всички: $ ( ИЗПЪЛНИМ ) $ ( addprefix run_, $ ( ИМЕНА ) )
$ ( ИЗПЪЛНИМ ) : $ ( OBJS )
$ ( CXX ) $ ( CXXФЛАГИ ) $ @ $ ( OBJS )
% .О: % .cpp
$ ( CXX ) $ ( CXXФЛАГИ ) -° С $ < $ @
# Създайте цели за всяко име
тичам_ % : $ ( ИЗПЪЛНИМ )
. / $ ( ИЗПЪЛНИМ ) $*
чисто:
rm -f $ ( ИЗПЪЛНИМ ) $ ( OBJS )
# Фалшиви цели
.ФАЛШИВО: всичко е чисто

Използването на инструкцията „make“ генерира изпълнима цел „hello“ и изпълнява програмата за всяко име, посочено в променливата „NAMES“.

направи

Можете също да промените изхода си, като използвате името от списък с префикса „run_“.

Направи run_Kim

Заключение

Това ръководство обсъди използването на заместващи символи и понятия foreach в make-файла, като същевременно обсъди техния синтаксис отделно. След това обсъдихме примерите за код, за да разработим подробно работата на всеки от тях с изходи за получаване на файлове със същите разширения и повторение на стойностите в списък с променливи.