'Make install' ne yapar?


52

Windows’tan Linux’a geçiş yaparken, Linux’ta yazılım yükleme işlemini anlayamıyorum. Windows'ta bir yükleme dosyasını çalıştırdığımızda, programı nereye kurmak istediğinizi sorar, muhtemelen sadece program dosyaları klasöründe. Daha sonra kayıt defterini düzenler. Buna Windows'ta kurulum denir. Linux'ta 'yazılım yüklemek' tam olarak ne anlama geliyor?

Kaynak kodunu indirdiğimi, yapılandırdığımı ve ardından ikili dosyayı kullandığımı varsayalım make. Şimdi sadece bir ikili, henüz kullanılabilir bir program değil. Nasıl kurulur? Tarafından make installmı? Peki bu komut tam olarak ne yapar?


1
Stackoverflow.com/questions/528399/… ' a cevabım, make installprogramcı bakış açısıyla adımlarla yapılan olağan işlere genel bir bakış sunar .
dmckee

Yanıtlar:


44

Make, genellikle derleme için kullanılan genel amaçlı bir iş akışı programıdır. Ancak her şey için kullanılabilir.

"Hepsini aç" gibi bir şey yaptığınızda, make programı "Makefile" adlı geçerli dizindeki bir dosyadan "all" adlı bir kural uygular. Bu kural genellikle derleyiciyi bazı kaynak kodları ikili dosyalara derlemek için çağırır.

"Make install" işlemini yaptığınızda, make programı ikilileri önceki adımdan alır ve erişilebilmeleri için uygun yerlere kopyalar. Windows'taki aksine, kurulum yalnızca bazı kitaplıkların ve yürütülebilir dosyaların kopyalanmasını gerektirir ve böyle bir kayıt gereksinimi yoktur. Kısacası, "install install" derlenmiş dosyaları uygun yerlere kopyalar.


4
Teknik olarak, kayıt defteri bir zorunluluk değildir - tüm yükleyicilerin eklediği şey, Linux'taki paket yöneticisi veritabanı gibi, yazılımı kaldırmayı seven insanlar için kolaylık sağlayan bir işlevdir.
yerçekimi

2
@grawity Aslında, Windows'ta, entegrasyon gibi birçok nedenden dolayı kayıt defterini düzenlemeniz gerekmektedir. Linux'ta yazılımları birbirine entegre etmek, genellikle dosyaları kopyalamayı ya da dosyaları bir post-script betiği gibi konfigüre etmek için satır eklemeyi içerir.
Camilo Martin

Ben adında kuralı nasıl bulabileceğinizi söylemek yararlı olacaktır @sharjeel alliçinde Makefileben nerede kural işlemeyi görebilirsiniz, o bölüm görünüyor sonu işaretleyici gibi ve ne alldurur.
Pro Backup

36

make installMakefileyazar ne yapmak isterse onu yapar. Genellikle, bu noktada, derleme sırasında genellikle daha önce bilindiği gibi yükleme dizinini değiştirmek için çok geç , bu nedenle yardım dosyalarına ve yapılandırma dosyalarına doğru yol adlarıyla başvuruda bulunabilir.

Pek çok proje, donanım ve işletim sistemi farklılıkları arasındaki taşınabilirliklerini geliştirmeye çalışmak için GNU Otomatik Araçlarını kullanır. (Farklı Unix değişkenleri, normal yoldan biraz uzakta olan işlev bildirimleri için biraz farklı başlıklar kullanır - çoğu program farklı yerlerde bildirilenlerden birine veya diğerine ihtiyaç duymaz.)

Bir proje Autotools kullandığında, yüklemek için normal mantra:

./configure
make
make install

./configureTipik bir komut satırı gibi seçeneğini kullanmanızı sağlar --prefix /opt/apacheveya farklı bir yol adı belirtmek için benzer bir şey. /usr/local/ortak bir varsayılandır prefix. : Bugüne "ana dizinleri" yaşamak için bir yer ve dağıtım sağlanan yazılım canlı yerel olarak inşa yazılım için daha kolaydır /usr/ /bin/, vb. (Paketleyiciler içindeki dosyalara asla dokunmamaya çok dikkat ederler - bunun yalnızca sistem yöneticileri için olduğunu bilirler.)/usr/local/

Neyse, ./configure --prefix /path/to/new/prefixbir değişken ayarlayacaktır Makefileyapılandırma dosyalarını değiştirerek, onlar dosyalar için doğru konumlara işaret böylece manuel sayfaları değiştirerek, programınızı hazırlarken mevcut olduğunu, vb Yani makeistediğiniz yükleme konumu için özel bir yazılım inşa edecek ve make installo konuma yükleyecektir.

Çoğu program son make installadım olmadan bile çalışabilir - ./program_namesık sık bunları başlatabilir. Bu kesinlikle Herbir proje şey - Bazı gibi postfix, qmailvb pek çok farklı hareketli parçadan oluşur ve bunlar birlikte çalışan tüm itimat edilir. Diğerleri, yerleşik oldukları dizinden para cezası uygulayacak kadar kendileri olabilir lsveya suyeteri kadar sahip olabilirler. (Bu genellikle yararlı değildir - ama bazen çok yararlıdır.)

Ancak, tüm projeler Oto Araçları kullanmaz - bakımı çok büyük , karmaşık ve sefildirler. Elle yazılanların Makefileyazması daha basittir ve şahsen sadece basit bir Makefileyapılandırma değişkenleriyle birlikte dağıtmanın hem geliştiriciler hem de kullanıcılar için daha kolay olduğunu düşünüyorum . ( ./configure ; make ; make installMantra işe yaradığında kullanıcılar üzerinde gerçekten kolay olsa da .)


19

make installhiçbir şey yapmadan installişlev / bölüm işlevini çalıştırMakefile


Doğru, sadece hoşuna gider make clean, temel olarak bölümün altındaki kodları çalıştırır.
Wulfric Lee,

8

Linux'a yazılım yüklemeyle ilgili bahsetmemiz gereken en önemli şey, dağıtımınızdan yazılım yüklemenin çok daha güvenilir ve kolay olmasıdır (bu amaç!). Sadece make installbaşka bir yol yoksa kullanın (alternatif programları da düşünün).

Windows kullanıcılarının genel yanılgısı, programları farklı yerlerden indirip yüklemeyi denemektir, tek bir tıklamayla veya komutla yüklenebilecek dağıtım paketlerini kontrol etmeyi unutmaktır (paket yöneticisinde).

Ayrıca, Linux'ta virüs enfeksiyonlarının bulunmamasının ana nedenlerinden birinin, yazılımın rastgele birçok yer yerine merkezi (güvenilir) konumdan (veya) kurulması olduğunu unutmayın.

Ek bir not olarak, Ubuntu gibi dağıtımlar her zaman eski paketler içerirken, her zaman güncel olan Arch Linux gibi dağıtımlar da vardır (gerçekte Debian / Ubuntu gibi Linux için yayımlanan her programı sunmamalarına rağmen).

Paket yöneticisini kullanırken tam olarak ne olacağını gelince, bağımlılıkları kontrol eder, paketleri indirir, paketlerini açar, tüm dosyaları FHS ve dağıtımın kendi kurallarına ve muhtemelen hakkında bulabileceğiniz diğer rutinlerine göre uygun dizinlere koyardı. Paket yöneticisinin man sayfasından.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.