Linux yapmak komutu, kaynak koddan program ve dosya gruplarını oluşturmak ve sürdürmek için kullanılır. Linux'ta geliştiricilerin en sık kullandığı komutlardan biridir. Geliştiricilerin terminalden birçok yardımcı programı kurmasına ve derlemesine yardımcı olur. Ayrıca büyük projelerin derlenme sürecini de yürütmektedir. Derleme süresinden tasarruf sağlar.
Make komutunun temel amacı büyük bir programı parçalara ayırmak ve yeniden derlenmesi gerekip gerekmediğini kontrol etmektir. Ayrıca bunların yeniden derlenmesi için gerekli emirleri de verir.
C++ programlama dili nesne yönelimli bir dil olduğu için bu bölümde C++ programlarını kullanacağız ancak siz makinenizde yüklü olan herhangi bir dili kullanabilirsiniz. Sadece programlarla sınırlı değil; bunu diğer görevleri tanımlamak için de kullanabiliriz.
Make komutu nasıl çalışır?
make komutu hedefleri argüman olarak alır. Bu bağımsız değişkenler 'Makefile'da belirtilmiştir. Makefile, hedeflerin yanı sıra bu hedeflerle ilgili ilişkili eylemleri de içerir.
Make komutunu çalıştırdığımızda, makefile dosyasını arar ve hedefi bulmak ve bağımlılıklarına erişmek için onu tarar. Bağımlılıklar belirtilmezse bağımlılığı arayacak ve oluşturacaktır. Bağımlılıklar oluşturulduktan sonra ana hedefi oluşturacaktır.
Örneğin sadece bir kaynak dosyayı değiştirmek istiyorsak ve make komutunu çalıştırıyorsak; dolayısıyla bu yalnızca kaynak dosyaya bağlı nesne dosyasını derleyecektir. Projenin son derlemesinde çok zaman kazandıracak.
Makefile nedir?
Make komutu makefile dosyasının yürütülmesini başlatır. Projenin bakımını yapmak için oluşturduğumuz kabuk komutlarını içeren özel bir dosyadır. Makefile, yürütülecek hedefleri ve komutları içerir. Birden fazla makefile oluşturulmasına izin verilmez. Bunun için ayrı bir dizin oluşturmanız önerilir.
En son dosyaları takip eder, bu nedenle yalnızca gerekli olan dosyaları güncelleyin. Çok sayıda kaynak dosya içeren büyük bir programımız varsa, tüm bağımlı dosyaları yeniden derlememiz gerekir. Bu nedenle son derece zaman alıcı bir süreç olabilir.
Makefile standartların bir listesine sahiptir. Bu standartlar sistemin hangi komutu yürütmek istediğimizi anlamasına yardımcı olur. Bu standartlar iki parça halinde olup yeni bir çizgiyle ayrılmıştır. İlk satır bağımlılık çizgisi, ve sonraki satırlar olarak kabul edilir eylemler veya komut S. Komutlar yeni satırda bir sekmeyle ayrılmıştır.
bağımlılıklar her dosyanın kaynak dosyalarla ilişkisini belirtin. Ve hedef yürütülebilir bir dosyadır ve make komutunun yürütülmesinden sonra oluşturulur.
Seçenekler
Make komutu, onu daha spesifik hale getirmek için çeşitli seçenekleri kolaylaştırır. Bazı önemli seçenekler aşağıdaki gibidir:
make -p -f/dev/null.
Make komutunun bazı örneklerini anlayalım. Makefile'ın temel kullanımını göreceğiz ve ayrıca bazı c++ programları ve bir makefile oluşturacağız. Make komutunu daha iyi anlamak için üzerlerinde bazı işlemler yapacağız.
rom nedir
Make komutunun temel kullanımı
Make komutunun en temel kullanımını anlayalım; bu, nasıl çalıştığını anlamanıza yardımcı olabilir.
Bir 'proje' dizini oluşturun ve dizini buna değiştirin. Aşağıdaki komutları göz önünde bulundurun:
mkdir project cd project
Şimdi bir tane oluştur 'Make dosyası' İlk program için aşağıdaki içeriğe sahip:
say_hello: echo 'Hello World!'
Yukarıdaki dosyadan say_hello, herhangi bir programlama dilindeki bir işlev gibi davranan bir hedeftir ve echo bir eylem olarak değerlendirilecektir. Eylemin bir kullanılarak yazılması gerektiği unutulmamalıdır. TAB. Hedef ve eylem birlikte makefile için bir kural oluşturur. Şimdi make komutunu aşağıdaki gibi yürütün:
Aşağıdaki çıktıyı göz önünde bulundurun:
Yukarıdaki çıktıdan yankı işleminin kendisinin görüntülendiğini görebiliriz. Çıkışta echo komutunu görüntülemek istemiyorsak, echo ile başlayarak yürütün. '@' sembol. Yankıyı bastırmak için makefile içeriğini aşağıdaki gibi güncelleyin:
kaplanla aslanın farkı
say_hello: @echo 'Hello World!'
Aşağıdaki çıktıyı göz önünde bulundurun:
Hedef, eylemlere bağlı bir ikili dosya olabilir.
Makefile içerisine created ve list gibi birkaç hedef daha ekleyelim. Makefile dosyasını aşağıdaki gibi güncelleyin:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Make komutunu çalıştırırsak, makefile dosyasının varsayılan hedefi olduğundan yalnızca ilk hedefi çalıştırır. Aşağıdaki çıktıyı göz önünde bulundurun:
Aşağıdaki içeriği makefile'imize ekleyerek varsayılan hedefi değiştirebiliriz:
.DEFAULT_GOAL := generate
Dosyanın ilk satırına aşağıdaki gibi ekleyin:
Yukarıdaki makefile 'oluştur'u varsayılan hedef olarak değerlendirecektir. Make komutunu yürütün; çıktıyı aşağıdaki gibi verecektir:
VARSAYILAN HEDEF seçeneği, tüm seçenekleri kullanmak üzere birden fazla hedef belirtmek için yalnızca bir hedefi yürütecektir. Birden fazla hedef belirtmek için makefile'ın ilk satırını aşağıdaki gibi güncelleyin:
all: say_hello generate
Belirtilen hedefi yürütecektir. Aşağıdaki çıktıyı göz önünde bulundurun:
Tüm hedefleri gerçekleştirmemizi sağlayan başka bir seçenek daha var. Makefile'ın tüm hedeflerini çalıştırmak istiyorsak dosyayı aşağıdaki gibi güncelleyin:
.PHONY: all say_hello generate list say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Yukarıdaki dosya belirtilen tüm hedefleri gerçekleştirecektir. Make komutunu yürütün, aşağıdaki çıktıyı göz önünde bulundurun:
Make komutunun gelişmiş kullanımı
Main.cpp, function1.cpp, function2.cpp dosyalarına ve function.h bağımlılık dosyasına sahip bir C++ projesi oluşturalım.
Dosyaların kodu aşağıdaki gibidir:
nesne java'sı nedir
main.cpp:
#include #include 'functions.h' int main() { print_hello(); std::cout<< std::endl; std::cout<< 'The factorial of 5 is' << factorial(5) << std:: endl; return 0; }
işlev1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
işlev2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
işlevler.h:
void print_hello(); int factorial (int n);
Şimdi aşağıdaki komutu çalıştırarak yukarıdaki projenin yürütülebilir bir dosyasını oluşturun:
g++ main.cpp function1.cpp function2.cpp -o hello
Yukarıdaki komut yürütülebilir bir dosya oluşturacaktır 'Merhaba' main.cpp, function1.cpp ve function2.cpp dosyalarının.
Aşağıdaki çıktıyı göz önünde bulundurun:
Yukarıdaki çıktıdan başarılı bir şekilde yürütülürse herhangi bir çıktı vermeyecektir.
Aynı görevi makefile kullanarak da gerçekleştirelim.
Olarak bir dosya oluşturun Make dosyası ve içine aşağıdaki kodu koyun.
all: g++ main.cpp function1.cpp function2.cpp -o hello
all anahtar sözcüğü hedef için kullanılır ve işlemi belirtmek için yeni satıra yukarıdaki gibi TAB ile aynı komutu koyun. Dosya 'yı kaydet. Aşağıdaki dosyayı göz önünde bulundurun:
Çalıştırmak için komutu aşağıdaki gibi yürütün:
Gimp arka planı siliyor
make
Yukarıdaki komut, belirtilen dosyalardan yürütülebilir bir 'merhaba' dosyası oluşturacaktır. Aşağıdaki çıktıyı göz önünde bulundurun:
Makefile'a birkaç görev daha ekleyelim. Görev ekle 'derleme' aşağıdaki gibi:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Görevi yürütmek için derlemek, aşağıdaki komutu yürütün:
make compile
Yukarıdaki komut derleme görevini yürütecektir. Aşağıdaki çıktıyı göz önünde bulundurun:
Makefile'ımıza birkaç görev daha uygulayalım.
Makefile'ı aşağıdaki gibi güncelleyin:
all: hello hello: main.o function1.o function2.o g++ main.o function1.o function2.o -o hello main.o: main.cpp g++ -c main.cpp function1.o: function1.cpp g++ -c function1.cpp function2.o: function2.cpp g++ -c function2.cpp clean: rm -rf *o hello
Yukarıdaki makefile'dan main.o, function1.o ve function2.o olmak üzere üç nesne oluşturduk. Ayrıca main.o, function1.o ve function2.o hedefleri için bağımlılıkları sırasıyla main.cpp, function1.cpp ve function2.cpp olarak sağladık. Tüm hedefler, içindeki belirtilen görevleri yerine getirecektir. Ayrıca tüm bağımlılıkları temizlemek ve yürütülebilir dosyayı kaldırmak için temiz bir hedef belirledik.
Şimdi yeni makefile'ımızı çalıştırmak için make all komutunu çalıştırın.
make all
Aşağıdaki çıktıyı göz önünde bulundurun:
Yukarıdaki çıktıdan, komutun ilk önce sırasıyla main.o, function1.o ve function2.o'yu çalıştırdığını görebiliriz. Verilen dosyaların yürütülebilir dosyasını ve nesneler dosyasını oluşturacaktır. Temiz hedefi çalıştırmayacaktır çünkü bunu merhaba'da belirtmedik. Aşağıdaki dosyaları göz önünde bulundurun:
Make komutunun basit bir çalışma süreci vardır. All seçeneğini uyguladı ve merhabaya gitti. Hello çalıştırıldıktan sonra hedefi belirtilen sırayla okur. Her hedefi ve bağımlılığını araştırdı ve bunları sırayla uyguladı.
Nesneleri ve yürütülebilir dosyayı kaldırmak için temizleme görevini gerçekleştirin. Temizleme görevini gerçekleştirmek için komutu aşağıdaki şekilde yürütün:
make clean
Aşağıdaki çıktıyı göz önünde bulundurun:
Yukarıdaki komut tüm nesneleri ve yürütülebilir dosyaları kaldıracaktır. Dizinin aşağıdaki ekine bakın:
Yukarıdaki görüntüden dizinimizi temizlediğimizi görebiliriz.
Make komutundaki değişkenler
Makefile'ımızdaki değişkenleri tanımlayabiliriz. Değişkenleri tanımlamak için şunu kullanın: '=' Şebeke. Örneğin, bir A değişkeni oluşturmak ve ona gcc komutunu atamak istiyorsak, onu şu şekilde atayın:
akşam yemeği vs akşam yemeği zamanı
A=g++
Bunu makefile'imizde şu şekilde kullanın:
hello: hello.cpp ${A} hello.cpp -o hello
Terminale şu şekilde iletilir:
g++ hello.cpp -o hello
Her ikisine de kod tarafından aynı şekilde davranıldığı için ${A} yerine $(A) kullanabiliriz.
Makefile'daki yorumlar
Makefile'a bir yorum eklemek için şunu kullanın: '#' sembol. Örneğin derleme bölümüne bir yorum eklemek için bunu şu şekilde ekleyin: '# Bu programı derleyecek .' Yorumlar derleyici tarafından dikkate alınmaz.