Makefile'da Joker Karakterler ve Foreach

Makefile Da Joker Karakterler Ve Foreach



Bir dosya her zaman farklı türde bir içerikten oluşur: ister basit bir metin dosyası, ister program kod dosyası, ister herhangi bir makefile olsun. Herhangi bir dosyanın içerik türü onu benzersiz kılar ve onu diğer dosya formatlarından farklı kılar. Aynen böyle, makefile işini düzgün bir şekilde gerçekleştirmek için farklı unsurları kullanan kurallardan oluşur. Bu öğeler arasında, benzersiz ve ekstra bir şey gerçekleştirmek için gereken joker karakter ve foreach vardır. Bu kılavuzda joker karakterlerin ve foreach'in makefile'da kullanıldığında gücünü tartışacağız.

Makefile'daki joker karakterler

Genel olarak joker, tahmin edilemeyen ve durumu her yöne çevirebilecek bir faktör olarak biliniyor. Makefile'deki joker karakterler, ister bir dosya ister herhangi bir klasör olsun, geçerli bir çalışma dizinindeki olası tüm kalıpları tespit etme bonusunu gerçekleştirmek için kullanılır. Bu kaynak dosyalar herhangi bir türde olabilir.







Bir makefile'da joker karakter kullanmak için, '*' veya '?' işaretinden sonra gelen 'joker karakter' anahtar sözcüğünü kullanmalısınız. işareti ve bir noktayla bağlanan dosya uzantısı. Ayrıca “?” işaretini de kullanabilirsiniz. Tek bir karakteri aramak için işaretine ve herhangi bir sayıda karakterle eşleşmek için “*” işaretine basın. Bu yapının tamamı parantez ve “$” işareti içerisinde kullanılmalıdır. Örneğin değer dosyasını alan “SRCS” değişkenini joker karakter aracılığıyla bildiriyoruz. Bu joker karakter, sonunda “cpp” deseni bulunan tüm dosyaları arar.





Makefile'da Foreach

Makefile'ın foreach işlevi, programlama dillerindeki foreach döngüsü gibi çalışır; bir listedeki öğeler üzerinde yinelenir. Makefile'deki foreach işlevi listenin her öğesi üzerinde belirli bir eylem gerçekleştirir. Bu öğe bir değişken veya herhangi bir kaynak dosya olabilir. Örneğin, makefile'daki foreach fonksiyonunun sözdizimini, üç kaynak dosyadan oluşan bir liste içeren SOURCES değişkeni aracılığıyla detaylandırıyoruz. foreach işlevi, kaynak dosyaların listesini yineleyerek ve bunları başka bir 'OBJECTS' değişkenine kaydederek üç nesne dosyası için aynı adı oluşturmak üzere bu SOURCES değişkenini kullanır. Son iki satır, yinelemeden sonra her C dosyası için bir nesne dosyası oluşturmak amacıyla makefile kuralının nasıl kullanılabileceğini gösterir.





KAYNAKLAR := dosya1.c dosya2.c dosya3.c
NESNELER := $ ( foreach kaynağı,$ ( KAYNAKLAR ) ,$ ( kaynak:.c=.o ) )
$NESNELER : % .Ö: % .C
$ ( CC ) $ ( CFLAG'LAR ) -C $ < $ @

Örnek 1: Joker Karakterleri Kullanma

Joker karakterlerin ve foreach işlevlerinin çizimini ve çalışmasını görüntülemek için bir C++ dosyası sunuyoruz. Bu 'salary.cpp' dosyası, giriş ve çıkış akışlarının sorunsuz bir şekilde kullanılmasına olanak sağlamak için 'iostream' başlığının kullanılmasıyla başlatılır. Ana yöntem, çalışma zamanında bir giriş değeri istemek için tamsayı tipinde bir 's' değişkeni ve 'cout' ifadesini bildirir. “Cin” standart giriş akışı, değeri çalışma zamanında kullanıcıdan alır ve bunu “s” değişkenine kaydeder. “cout”, kullanıcı tarafından girilen değeri konsol ekranında görüntüler.

#include
ad alanı std'sini kullanma;
int ana ( ) {
int s;
cout << 'Maaş girin:' ;
yemek yiyor >> S;
cout << ' \N Maaş: ' << S << sonunda;
geri dönmek 0 ;
}



Makefile dosyasını C++ için derleyiciyi tanımlayan “CXX” değişkeni ile başlatıyoruz ve CXXFLAGS değişkeni C++ derleyicisinin flaglarını tutuyor. EXECUTABLE değişkeni, bir makefile'ın yürütülmesinden sonra oluşturulan yürütülebilir bir 'merhaba' dosyasının adını tutar. SRCS değişkeni, '.cpp' ile biten herhangi bir modeli aramak için '*' joker karakterini kullanarak geçerli bir dizindeki tüm C++ dosyalarını alır. OBJS değişkeni, SRCS değişkeni kullanılarak oluşturulacak nesne dosyalarının adlarını tutar ve “cpp” uzantısını “o” ile değiştirir. Varsayılan 'tümü' hedefi makefile'ı oluşturur ve EXECUTABLE değişkenine bağlıdır.

İlk kural, “OBJS” değişkeni aracılığıyla oluşturulan dosya adlarını kullanarak OBJS değişkeni (nesne dosyalarının adları) nesne dosyasına bağlı olan hedef “merhaba” dosyasını oluşturur. İkinci makefile kuralı, C++ kod dosyasını derledikten sonra C++ dosyasına bağlı olan “.o” uzantılı nesne dosyasını oluşturur. Burada “%”, “cpp” ile biten herhangi bir desenin dosya adlarını aramak için kullanılan bir joker karakterdir. Sonunda, temiz hedef, yeni oluşturulan yürütülebilir dosyaları ve nesne dosyalarını '-f' bayrağını kullanarak bir dizinden zorla temizlemek için 'rm' komutunu kullanır.

CXX = g++
CXXBAYRAKLAR = -Duvar -std =c++ on bir
UYGULANABİLİR = merhaba
SRCS = $ ( joker karakter * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
hepsi: $ ( UYGULANABİLİR )
$ ( UYGULANABİLİR ) : $ ( OBJ'ler )
$ ( CXX ) $ ( CXXBAYRAKLAR ) $ @ $ ( OBJ'ler )
% .Ö: % .cpp
$ ( CXX ) $ ( CXXBAYRAKLAR ) -C $ < $ @
temiz:
rm -F $ ( UYGULANABİLİR ) $ ( OBJ'ler )

“Make” komutunu çalıştırdıktan sonra hem hedef hem de nesne dosyaları oluşturuldu. Çalıştırılabilir “merhaba” dosyasını çalıştırdıktan sonra kullanıcıdan maaş girmesi isteniyor ve “67000” ekliyoruz. Sonunda maaş geri görüntülenir.

yapmak

Örnek 2: Foreach'ı Kullanma

Joker karakterleri kullandıktan sonra sıra makefile'de foreach fonksiyonunu kullanmaya geldi. Makefile kodunun geri kalanı aynıdır. 6. satırda, 'NAMES' adlı başka bir değişkeni üç değerden oluşan bir listeyle başlatıyoruz: Kate, Kim, Tim. Varsayılan 'tümü' hedefi, EXECUTABLE değişkenine (hedef dosya adı 'hello') ve foreach ifadesine bağlıdır. “Addprefix” işlevi, “NAMES” listesindeki her ismin başına “run_” önekini ekleyerek hedef adlarını dinamik olarak oluşturmak için “NAMES” değişkenini yineler.

Sekizinci satırdaki kural, çıktı çalıştırılabilir hedef dosyasının, yani merhaba dosyasının “OBJS”ye bağlı olduğunu gösterir. “-o” bayrağı OBJS'yi kullanarak hedef çıktı dosyasını oluşturur. Onuncu satırdaki kural, “cpp” uzantılı kaynak dosyaları kullanarak hedef nesne dosyasını oluşturur. Bunu yapmak için, bir kaynak dosyayı derlemek ve hedef nesil için gerekli olan ilgili nesne dosyasını oluşturmak için “-c” bayrağı kullanılır. On üçüncü satırda EXECUTABLE değişkenini kullanarak “run_” önekiyle başlayan farklı isimlerle çıktı oluşturuyoruz. Sonunda temiz hedef ve Sahte hedefler, nesneyi ve hedef dosyaları kaldıracak ve temizleyecektir.

CXX = g++
CXXBAYRAKLAR = -Duvar -std =c++ on bir
# yürütülebilir hedef dosya
UYGULANABİLİR = merhaba
SRCS = $ ( joker karakter * .cpp )
OBJS = $ ( SRCS:.cpp=.o )
# İsim listesi
İSİMLER = Kate Kim Tim
# Hedefler
hepsi: $ ( UYGULANABİLİR ) $ ( addprefix run_, $ ( İSİMLER ) )
$ ( UYGULANABİLİR ) : $ ( OBJ'ler )
$ ( CXX ) $ ( CXXBAYRAKLAR ) $ @ $ ( OBJ'ler )
% .Ö: % .cpp
$ ( CXX ) $ ( CXXBAYRAKLAR ) -C $ < $ @
# Her ad için hedefler oluşturun
koşmak_ % : $ ( UYGULANABİLİR )
. / $ ( UYGULANABİLİR ) $*
temiz:
rm -F $ ( UYGULANABİLİR ) $ ( OBJ'ler )
# Sahte hedefler
.PHONY: hepsi temiz

'Make' komutunun kullanılması, yürütülebilir 'merhaba' hedefini oluşturur ve 'İSİMLER' değişkeninde belirtilen her ad için programı çalıştırır.

yapmak

Çıktınızı, “run_” ön ekine sahip bir listedeki adı kullanarak da değiştirebilirsiniz.

Run_Kim yap

Çözüm

Bu kılavuzda joker karakterlerin ve foreach kavramlarının makefile'de kullanımı ve bunların sözdizimleri ayrı ayrı tartışılmıştır. Bundan sonra, aynı uzantılara sahip dosyaları alma ve değişken listesindeki değerleri yineleme konusunda her birinin çıktılarla çalışmasını detaylandırmak için kod örneklerini tartıştık.