logo

Linux yapma komutu

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:

    -b, -m:Bu seçenekler, make komutunun farklı sürümlerinin uyumluluğunu göz ardı etmek için kullanılır.-B, --her zaman-yap:Bu seçenekler koşulsuz olarak tüm hedefleri gerçekleştirmek için kullanılır.-C dizin, --directory=dir:Bu seçenekler makefile dosyasını çalıştırmadan önce dizini değiştirmek için kullanılır.-D:Hata ayıklama bilgilerini yazdırmak için kullanılır.--hata ayıklama[=BAYRAKLAR]:Normal işlemeyle birlikte hata ayıklama bilgilerini yazdırmak için kullanılır. Bayrağı atlarsak '-d' seçeneğiyle benzer sonuçlar gösterecektir.-e, --environment-overrides:Ortamdan alınan değişkenlerin makefile önceliğini sağlamak için kullanılır.-f dosya, --file=dosya, --makefile=DOSYA:Bir dosyayı makefile olarak kullanmak için kullanılır.-i, --ignore-hataları:'-i' seçeneği komutlardaki tüm hataları yok saymak için kullanılır.-I dizin, --include-dir=dir:Belirtilen makefile'ın aranacağı dizini belirtmek için kullanılır. Birçok '-I' seçeneğini belirtirsek, belirtilen sırayla birçok dizinde arama yapacaktır.-j [işler], --işler[=işler]:Aynı anda çalıştırılacak iş sayısını belirtmek için kullanılır. Eğer çok sayıda '-j' seçeneği sunarsak, sonuncusunun çalıştırıldığı kabul edilecektir. İş sayısını belirtmezsek aynı anda çalışabilecek işler sınırlanmayacaktır.-k, --devam etmeye devam et:Hata alındıktan sonra programın mümkün olduğu kadar devam ettirilmesi için kullanılır.-l [yükle], --yük ortalaması[=yükle]:Kuyrukta başka görevler varsa ve yük ortalaması minimumdaysa yeni görev başlatılmaması gerektiğini belirtmek için kullanılır.-n, --just-print, --dry-run, --recon:Çalıştırılacak komutu görüntülemek için kullanılır.-o dosya, --eski-dosya=dosya, --varsayım-eski=dosya:Bağımlılıklarından daha eski olsa bile markanın dosyayı yeniden oluşturmayacağını garanti etmek için kullanılır.-O[tür], --output-sync[=tür]:Diğer görevlerin birbirine karıştırılmış çıktıları yerine, her bir görevin çıktısının bir araya getirildiğini doğrulamak için kullanılır. '-j' seçeneğiyle birden fazla işin işlenmesi için kullanışlıdır.-p, --print-veri tabanı:Makefile dosyalarını okuduktan sonra oluşan veritabanını yazdırmak için kullanılır. '-v' seçeneğiyle kullanıldığında sürüm bilgisinin yazdırılması da faydalıdır. Herhangi bir dosyayı yeniden oluşturmaya çalışmadan veritabanını yazdırmak için komutu aşağıdaki gibi yürütün:
    make -p -f/dev/null.-q, --soru:'-q' seçeneği aşağıdakiler için kullanılır: Soru modu. Herhangi bir komutu çalıştırmaz veya hiçbir şey yazdırmaz. Belirtilen hedef zaten senkronize edilmişse, yalnızca çıkış durumunun sıfır olduğunu döndürür; aksi halde sıfırdan farklı bir çıkış durumu görüntüleyecektir.-r, --yerleşik-kural yok:Yerleşik örtülü kuralların kullanımını ortadan kaldırmak için kullanılır.-R, --yerleşik-değişkenler yok:Herhangi bir yerleşik değişken tanımlamak istemiyorsak kullanışlıdır.-s, --sessiz, --sessiz:Bu seçenekler denir Sessiz çalışma. Komutların yürütülürken yazdırılmasını kısıtlar.-S, --devam etmeyin, --durun:'-k, --keep-going' işleminin etkisini iptal etmek için kullanılır.-t, --touch:Komutlarını çalıştırmak yerine dosyalara dokunmak için kullanılır.--iz:Her hedefin konumunu izlemek için kullanılır.-v, --versiyon:Make yardımcı programının yüklü sürümünü yazdırmak için kullanılır. Ayrıca yazarların bir listesini, telif hakkını ve make yardımcı programına ilişkin bazı bildirimleri görüntüler.-w, --print-directory:Diğer işlemlerden önce ve sonra bir çalışma dizini içeren bir yazdırma mesajını izlemek için kullanılır. Özyinelemeli make komutunun karmaşık yapısından kaynaklanan hataların izini sürmek faydalıdır.--no-baskı dizini:'-w' seçeneğini kapatmak için kullanılır.-W dosyası, --what-if=dosya, --new-file=dosya, --assume-new=dosya:Bu seçenekler, hedef dosyanın yeni değiştirilmiş olduğunu iddia eder.--warn-tanımsız-değişkenler:Bu seçenek tanımlanmamış bir değişkene başvurulduğu konusunda uyarmak için kullanılır.

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

Ç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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

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:

Linux yapma komutu

Yukarıdaki komut tüm nesneleri ve yürütülebilir dosyaları kaldıracaktır. Dizinin aşağıdaki ekine bakın:

Linux yapma komutu

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.