OnWorks Linux ve Windows Çevrimiçi İş İstasyonları

Logo

İş İstasyonları için Çevrimiçi Ücretsiz Barındırma

<Önceki | İçerik | Sonraki>

Programı Oluşturma

Çoğu program basit, iki komutlu bir diziyle oluşturulur:



./yapılandırmayı yapılandır

./yapılandırmayı yapılandır


The yapılandırmak program, kaynak ağaçla birlikte sağlanan bir kabuk betiğidir. Görevi, durumu analiz etmektir. çevre oluşturmak. Çoğu kaynak kodu, taşınabilir. Yani, birden fazla türde Unix benzeri sistem üzerine inşa edilecek şekilde tasarlanmıştır. Ancak bunu yapmak için, sistemler arasındaki farklılıkları karşılamak için kaynak kodun derleme sırasında küçük ayarlamalardan geçmesi gerekebilir. yapılandırmak ayrıca gerekli harici araçların ve bileşenlerin kurulu olup olmadığını kontrol eder. Hadi koşalım yapılandırmak. Beri yapılandırmak kabuğun normalde programların bulunmasını beklediği yerde bulunmaz, komutun önüne şunu ekleyerek kabuğa konumunu açıkça söylemeliyiz. ./ programın geçerli çalışma dizininde bulunduğunu belirtmek için:



[me@linuxbox diksiyon-1.11]$ . / Yapılandırma

[me@linuxbox diksiyon-1.11]$ . / Yapılandırma


yapılandırma, yapıyı test ederken ve yapılandırırken çok sayıda mesaj verir. Bittiğinde, şöyle bir şeye benzeyecek:



libintl.h varlığını kontrol ediyor... evet libintl.h'yi kontrol ediyor... evet

gettext içeren kitaplık denetleniyor... hiçbiri gerekli yapılandırma: ./config.status oluşturuluyor

config.status: Makefile oluşturma config.status: diction.1 oluşturma config.status: diction.texi oluşturma config.status: diction.spec oluşturma config.status: style.1 oluşturma config.status: test/rundiction oluşturma config.status: config.h oluşturma [me@linuxbox diction-1.11]$

libintl.h varlığını kontrol ediyor... evet libintl.h'yi kontrol ediyor... evet

gettext içeren kitaplık denetleniyor... hiçbiri gerekli yapılandırma: ./config.status oluşturuluyor

config.status: Makefile oluşturma config.status: diction.1 oluşturma config.status: diction.texi oluşturma config.status: diction.spec oluşturma config.status: style.1 oluşturma config.status: test/rundiction oluşturma config.status: config.h oluşturma [me@linuxbox diction-1.11]$


Burada önemli olan hata mesajı olmamasıdır. Varsa, yapılandırma başarısız olur ve hatalar düzeltilene kadar program oluşturulmaz.

Göreceğiz yapılandırmak kaynak dizinimizde birkaç yeni dosya oluşturdu. Bunlardan en önemlisi Makefile. Makefile komut veren bir yapılandırma dosyasıdır. yapmak programı tam olarak nasıl oluşturacağınızı öğrenin. Onsuz, yapmak koşmayı reddedecektir. Makefile sıradan bir metin dosyasıdır, böylece onu görebiliriz:



[me@linuxbox diksiyon-1.11]$ daha az Makefile

[me@linuxbox diksiyon-1.11]$ daha az Makefile


The yapmak program girdi olarak a alır makefile (normalde Makefile), bitmiş programı oluşturan bileşenler arasındaki ilişkileri ve bağımlılıkları açıklar.

Makefile'ın ilk kısmı, makefile'ın sonraki bölümlerinde ikame edilen değişkenleri tanımlar. Örneğin şu satırı görüyoruz:



cc= gcc

cc= gcc


C derleyicisini tanımlayan gcc. Makefile'de daha sonra kullanıldığı bir örnek görüyoruz:


diksiyon:

diction.o cümle.o çeşitli.o getopt.o getopt1.o

$(CC) -o $@ $(LDFLAGS) diction.o cümle.o misc.o \ getopt.o getopt1.o $(LIBS)

diksiyon:


görüntü

Burada bir ikame yapılır ve değer $(CC) tarafından değiştirilir gcc çalışma zamanında.

görüntü

Makefile'ın çoğu, bir diziyi tanımlayan satırlardan oluşur. hedef, bu durumda yürütülebilir dosya diksiyon, ve bağımlı olduğu dosyalar. Kalan satırlar, bileşenlerinden hedefi oluşturmak için gereken komutları açıklar. Bu örnekte yürütülebilir dosyanın diksiyon (nihai son ürünlerden biri) varlığına bağlıdır. diksiyon.o, cümle. o, çeşitli, getopt.o, ve getopt1.o. Daha sonra makefile'de bunların her birinin tanımlarını hedef olarak görüyoruz:


diksiyon.o:

getopt.o: getopt1.o: çeşitli.o:

diction.c config.h getopt.h çeşitli.h cümle.h

getopt.c getopt.h getopt_int.h getopt1.c getopt.h getopt_int.h çeşitli.c config.h çeşitli.h

diksiyon.o:

getopt.o: getopt1.o: çeşitli.o:


cümle.o:

stil.o:

cümle.c yapılandırma.h çeşitli.h cümle.h

style.c config.h getopt.h çeşitli.h cümle.h

cümle.o:

stil.o:


görüntü

Ancak, onlar için belirtilen herhangi bir komut görmüyoruz. Bu, dosyada daha önce bulunan ve herhangi bir şeyi derlemek için kullanılan komutu tanımlayan genel bir hedef tarafından gerçekleştirilir. .c dosyaya bir .o Dosya:



.co:

$(CC) -c $(CPPFLAGS) $(CFLAGS) $

.co:

$(CC) -c $(CPPFLAGS) $(CFLAGS) $


Bütün bunlar çok karmaşık görünüyor. Parçaları derlemek ve onunla bitirmek için neden tüm adımları listelemiyorsunuz? Bunun cevabı birazdan netleşecek. Bu arada koşalım yapmak ve programlarımızı oluşturun:


[me@linuxbox diksiyon-1.11]$ yapmak

[me@linuxbox diksiyon-1.11]$ yapmak


The yapmak program içeriğini kullanarak çalışacaktır. Makefile eylemlerine rehberlik etmektir. Bir sürü mesaj üretecek.

Bittiğinde, tüm hedeflerin artık dizinimizde bulunduğunu göreceğiz:



[ben@linuxbox

diksiyon-1.11]$ ls

yapılandırma.tahmin

depo

en

kurulum-sh

cümle.c

yapılandırma.h

diksiyon

en_GB

Makefile

cümle.h

yapılandırma.h.in

diksiyon.1

tr_GB.mo

makefile.in

cümle. o

yapılandırma.log

diksiyon.1.in

tr_GB.po

çeşitli.c

stil

yapılandırma.durum

diksiyon.c

getopt1.c

çeşitli

stil.1

yapılandırma.sub

diksiyon.o

getopt1.o

çeşitli

stil.1.in

yapılandırmak

diksiyon.pot

getopt.c

HABERLER

stil.c

yapılandırmak.in

diksiyon.spec

getopt.h

nl

stil.o

KOPYALAMA

diksiyon.spec.in

getopt_int.h

nl.mo

test

de

diksiyon.texi

getopt.o

nl.po

de.mo

diction.texi.in

INSTALL

README


Dosyalar arasında gördüğümüz diksiyon ve stil, oluşturmak için yola çıktığımız programlar. Tebrikler sırada! Az önce kaynak koddan ilk programlarımızı derledik!

Ama sadece meraktan, hadi koşalım yapmak Tekrar:


[me@linuxbox diksiyon-1.11]$ yapmak

make: 'hepsi' için yapılacak bir şey yok.

[me@linuxbox diksiyon-1.11]$ yapmak

make: 'hepsi' için yapılacak bir şey yok.


Sadece bu garip mesajı üretir. Neler oluyor? Neden programı yeniden oluşturmadı? Ah bu büyü yapmak. Her şeyi yeniden inşa etmek yerine, yapmak sadece inşa edilmesi gerekenleri inşa eder. Mevcut tüm hedeflerle, yapmak yapacak bir şey olmadığına karar verdi. Bunu, hedeflerden birini silerek ve ne yaptığını görmek için make'yi tekrar çalıştırarak gösterebiliriz. Ara hedeflerden birinden kurtulalım:



[me@linuxbox diksiyon-1.11]$ rm getopt.o

[me@linuxbox diksiyon-1.11]$ yapmak

[me@linuxbox diksiyon-1.11]$ rm getopt.o

[me@linuxbox diksiyon-1.11]$ yapmak


Bunu görüyoruz yapmak yeniden kurar ve yeniden bağlar diksiyon ve stil programlar, eksik modüle bağlı olduklarından. Bu davranış aynı zamanda bir başka önemli özelliğe de işaret eder. yapmak: hedefleri güncel tutar. yapmak hedeflerin bağımlılıklarından daha yeni olduğu konusunda ısrar ediyor. Bir programcı genellikle bir miktar kaynak kodunu güncelleyip daha sonra kullanacağından, bu çok mantıklıdır. yapmak bitmiş ürünün yeni bir versiyonunu oluşturmak için. yapmak güncellenmiş koda dayalı olarak oluşturulması gereken her şeyin oluşturulmasını sağlar. eğer kullanırsak dokunma kaynak kod dosyalarından birini “güncellemek” için bir programda, bunun olduğunu görebiliriz:



[me@linuxbox diksiyon-1.11]$ ls -l diksiyon getopt.c

-rwxr-xr-x 1 ben ben 37164 2009-03-05 06:14 diksiyon

-rw-r--r-- 1 ben ben 33125 2007-03-30 17:45 getopt.c [me@linuxbox diction-1.11]$ getopt.c'ye dokunun

[me@linuxbox diksiyon-1.11]$ ls -l diksiyon getopt.c

-rwxr-xr-x 1 ben ben 37164 2009-03-05 06:14 diksiyon

-rw-r--r-- 1 ben ben 33125 2009-03-05 06:23 getopt.c [me@linuxbox diction-1.11]$ yapmak

[me@linuxbox diksiyon-1.11]$ ls -l diksiyon getopt.c

-rwxr-xr-x 1 ben ben 37164 2009-03-05 06:14 diksiyon

-rw-r--r-- 1 ben ben 33125 2007-03-30 17:45 getopt.c [me@linuxbox diction-1.11]$ getopt.c'ye dokunun

[me@linuxbox diksiyon-1.11]$ ls -l diksiyon getopt.c

-rwxr-xr-x 1 ben ben 37164 2009-03-05 06:14 diksiyon

-rw-r--r-- 1 ben ben 33125 2009-03-05 06:23 getopt.c [me@linuxbox diction-1.11]$ yapmak


Sonra yapmak çalıştığında, hedefi bağımlılıktan daha yeni hale getirdiğini görüyoruz:



[me@linuxbox diksiyon-1.11]$ ls -l diksiyon getopt.c

-rwxr-xr-x 1 ben ben 37164 2009-03-05 06:24 diksiyon

-rw-r--r-- 1 ben ben 33125 2009-03-05 06:23 getopt.c

[me@linuxbox diksiyon-1.11]$ ls -l diksiyon getopt.c

-rwxr-xr-x 1 ben ben 37164 2009-03-05 06:24 diksiyon

-rw-r--r-- 1 ben ben 33125 2009-03-05 06:23 getopt.c


Yeteneği yapmak yalnızca inşa edilmesi gerekenleri akıllıca inşa etmek, programcılar için büyük bir avantajdır. Küçük projemizde zaman tasarrufu çok belirgin olmasa da,


daha büyük projelerde çok önemlidir. Unutmayın, Linux çekirdeği (sürekli değişiklik ve iyileştirmeden geçen bir program) birkaç tane içerir. milyon Kod satırları.


OnWorks'te En İyi OS Bulut Bilişimi: