Makefiles öğrenmek ne kadar önemli? [kapalı]


12

C ++ 'da çoğunlukla hobi olarak çalışıyorum (hala okuldayım ve bunun için gerçek bir işim yok). IDE'ler benim için makyaj oluşturuyor ve bu yüzden onları nasıl kendim yapacağımı öğrenmeye değip değmeyeceğini merak ediyorum. "Öğrenmeye değer" derken, her şeyi bırakmalı ve c ++ öğrenmeye devam etmeden önce bunları nasıl yazacağımı öğrenmeli miyim? Onları öğrenmek gerçekten gerekli olacak mı? Eğer öyleyse, onları (genel sözdizimi ve nasıl çalıştıklarını anlama vb.) Öğrenmeli miyim yoksa gerçekten nasıl yazacağımı öğrenmeli miyim?


1
açık kaynaklı projelerin çoğu, makyaj malzemelerini şu veya bu şekilde yoğun bir şekilde kullanır. Yani, evet, makyaj dosyalarının nasıl çalıştığını öğrenmelisin. Ellerinizle onları Yazma başka bir hikaye ve çok az dosya varsa veya genel / örtük kurallar ve diğer benzer teknikler kullanarak hariç bazı araç tarafından bunları üreten tercih kaçınılmalıdır
permeakra

başkalarının kaynağınızı Linux ve diğer Unix tabanlı işletim sistemlerinde derlemesini istiyorsanız, bunları öğrenmeniz gerekir.

Bunu :) bu soruya tüm cevapları okumanızı alacağını daha kısa sürede makefiles, bağımlılıklar ve oyuncu değişikliği vb temellerini öğrenebilirler
JohnB

Yanıtlar:


14

Evet, kesinlikle Makefiles'in nasıl çalıştığını anlamaya değer. Şu anda sizinle ilgili olmayabilir (çünkü onları üreten bir IDE kullanıyorsunuz), ancak olasılıkla bilginin gelecekte yararlı olması muhtemeldir.

"Öğrenmeye değer" derken, her şeyi bırakmalı ve c ++ öğrenmeye devam etmeden önce bunları nasıl yazacağımı öğrenmeli miyim?

Açıkçası, bu "öğrenmeye değer" tuhaf bir kavram ...

Ama hayır, bunu yapman gerektiğini düşünmüyorum.

Onları öğrenmek gerçekten gerekli olacak mı?

Gelecekte bu bilgiye gerçekten ihtiyacınız olup olmayacağını tahmin edemeyiz. C ++ programlamaya devam edip etmediğinize ve bunu hangi bağlamda yaptığınıza bağlıdır.

Eğer öyleyse, onları (genel sözdizimi ve nasıl çalıştıklarını anlama vb.) Öğrenmeli miyim yoksa gerçekten nasıl yazacağımı öğrenmeli miyim?

Her ikisini de tavsiye ederim. Bir Makefile yazamıyorsanız, neler olduğunu bilmek tartışmalıdır.

Çok fazla bilginin yararlı olmadığını söyleyen başka bir bakış açısı var.

Eğer derinlemesine düşünürseniz, Make'ın birçok farklı sürümü olduğunu ve Make'ın birden çok platformda birden çok sürümü ile çalışan karmaşık bir Makefile yazmanın zor olduğunu öğreneceksiniz. Ancak, açık kaynak dünyasında, bu gibi kullanım araçlarına "en iyi uygulama" olduğunu automake, autoconfve bu yüzden bunu yaparsak, versiyon / platform ile ilgili karmaşıklığı bir çok perde arkasında ele almaktadır makefiles vb üretmek için üzerinde .


Son olarak, soruyu "java" olarak etiketlediniz. Benim almam, makeJava uygulamaları oluşturmak için kullanmamalısınız (yerel kod kitaplıkları da oluşturmuyorsanız). Kullanımı çok daha kolay olan ve daha iyi bir iş yapan Java'ya özgü oluşturma araçları vardır make.


8

Açık kaynaklı veya Unix benzeri işletim sistemleriyle çalışıyorsanız, evet. Yine de kalbi alın, o kadar karmaşık değiller. Öğrenme makeuzun vadede size çok zaman kazandıracaktır.


Okumayı mı, yazmayı mı öğreniyorsun?

Her ikisi de. Kullandığınız yazılımın hatalarını ayıklayabilmeniz veya kendi yazılımınızı oluşturabilmeniz için nasıl okuyacağınızı bilmek istiyorsunuz.
EhevuTov

O zaman yazı kısmına katılmıyorum. Yapıları otomatikleştirmenin birçok başka yolu - muhtemelen daha iyi - yolları var. Gerçekten faydalı makyaj malzemeleri yazmak önemsiz olmaktan çok uzaktır.

3

Makefiles UNIX sistemlerinde (ör. AIX, Linux, OS X) önemlidir. Ancak son yıllarda mutlak “bunu bilmelisiniz” öneminin azaldığını düşünüyorum. Örneğin, bunları Windows geliştirmesinde (Visual Studio vb.) Gerçekten bulamazsınız ve XCode (OS X'te) tamamen farklı bir sistem kullanır. Java'ya fazla girmiyorum ama orada karınca dosyaları kullandıklarını düşünüyorum.

Üzerinde çalıştığınız işletim sistemi için yerel derleme dosyaları oluşturan CMake adında çok güzel bir sistem var. Örneğin, proje belirtiminizi CMake'de yazarsanız, Windows'ta bir Visual Studio oluşturma projesi, Mac'te bir XCode projesi ve Linux'ta bir Makefile oluşturabilirsiniz. Bir şekilde, CMake, autoconf ve automake'nin yerini alıyor.

Ben genellikle "büyük projelerim" için CMake dosyaları oluşturuyorum ama hızlı bir "sadece hallet" yazmayı istemem durumunda Make biliyorum Makefile. Kültürel okuryazarlığınız için iyidir, çünkü Makefiles kullanan tonlarca ve tonlarca yazılım kütüphanesi vardır ve kaçınılmaz olarak belirli derleyicileri ve kütüphane yerlerini düzenlemeniz gerekecektir. Ancak, büyük projelerin (KDE gibi) CMake ve benzerine doğru ilerlediğini göreceksiniz, çünkü Make, projeler karmaşıklaştığında çirkin kafalarını arkadan alan bazı sınırlamalara sahiptir.


CMake'i öğrenmek, daha faydalı büyüklük dereceleri olacaktır. Makefiles bir uygulama detayı olarak görülebilir - tıpkı Visual Studio proje dosyaları gibi onları (gerçekten zorlanana kadar) öğrenmeye zahmet etmeyin.

2

Önyargılarım bence makefiles korkunç bir sistem. Var olan bir dosyayı değiştirebilmeniz için genel sözdizimini öğrenmelisiniz. Ama bu konuda her şeyi öğrenmenin ya da sıfırdan yapmanın yararlı olduğunu düşünmüyorum.


Makefiles neden korkunç bir sistem olduğunu açıklamak ister misiniz? Neyle karşılaştırılmış?
JonnyJD

@JonnyJD: Bir şey, iyi bir derleme sisteminin her alt dizine bir make dosyası koymanız gerektiğine inanmıyorum. Ama bu kötü çünkü kullanımı daha kolay değil sonra gerçekten bir şey söyleyen bir yarasa dosyası yazma.

El ile derleme dosyaları oluşturmayı sevmediğiniz gibi görünüyor. Kendi içinde önemli bir şey değil. Makefiles, manuel olarak okunması ve yazılması mümkün olan bir varyanttır. (modüler, bash / bat ile karşılaştırıldığında sadece bağımlılık takibini basitleştirdi) Otomatik parça automake. Aslında çok farklı olan tek şey bir GUI'de bağımlılıkları belirlemek ve tüm bunları bir proje dosyasına kaydetmek. Ya da hangi yapı sistemi daha az korkunç?
JonnyJD

2

IDE çıktısının birçok yönünde olduğu gibi, otomatik olarak oluşturulan tipik bir makefile genellikle verimsiz bir şekilde yapılandırılır.

Uygun bir anlayış seviyesiyle, performansı önemli ölçüde iyileştirmek genellikle mümkündür (daha hızlı yapılar vb.). Ancak, neler olduğunu gerçekten bilmiyorsanız, otomatik oluşturulmuş bir dosyayla uğraşırken FUBAR'a daha yatkın olursunuz.

Neler olup bittiğini anlayabilmenizi kesinlikle tavsiye ederim ... daha sonra var olanı düzenlemeyi veya kendinizinkini oluşturmayı seçip ayırmamanız ayrı bir konudur.


2

Başarılı bir şekilde kullanabilmek makeveya bunun gibi bir şey, "bir programın birden fazla modülden oluşan bölümleri arasındaki bağımlılıkların nasıl modelleneceğini anlar" kutusunu işaretlemenizi sağlar.


1

Makefiles yazmayı öğrenmek birkaç nedenden dolayı iyi bir fikirdir.

  1. Marka, bileşenler arasındaki bağımlılıkları kurallarla kodlamanızı sağlayan bir dildir. Bu şekilde kod yazma konusunda çok deneyim kazanacaksınız ve programlama problemlerini çözmeyi düşünmek için araçlarınızı genişletiyor.
  2. Make ile öğrendiğiniz ilkeler, Java veya Ruby dünyasında programlamayı öğrenmeyi seçerseniz Ant, Maven ve Rake ile kullanılabilir.
  3. Birçok IDE, yazılımınızı oluşturmanıza yardımcı olacak yapılandırma bilgilerini taşıyan sihirli dosyalara sahiptir. Bana inanmıyorsanız, yazılımınızı IDE olmadan oluşturmak için bir komut dosyası yazmaya çalışın. Kendi Makefile'lerinizi yazdığınızda, kodunuz, kütüphaneleriniz ve ortam değişkenleriniz arasındaki bağımlılıkların farkına varırsınız. Sistemler büyüdükçe, sisteminizde hata ayıklamak için kullanışlı bir araç olduğu ortaya çıkıyor.

0

Her zaman kullandığınız derleme sistemini anlamaya çalışmalısınız.

Bu, tüm yapı dosyalarını elle oluşturabileceğiniz anlamına gelmez. Önemli olan, derleme sisteminin projeniz için ne yaptığını ve küçük projeleri manuel olarak derleme yeteneğini anlamaktır ("bir terminalde komutlar yazarken" olduğu gibi).

Sadece (basit) Makefiles'i yaratmanın, neler olduğunu anlamanın en kolay adımı olduğunu düşünmeye meyilliyim, ancak bir şeyleri nasıl inşa edeceğinizi anlamanın başka yollarına da sahip olabilirsiniz.

Neden / ne zaman Makefiles öğrenmek

Yalnızca Windows için programlamaya devam ediyorsanız ve başka hiç kimsenin kodunuzu derlemesini beklemiyorsanız, kodu istediğiniz gibi derlemekten çekinmeyin.

Derleyici agnostik programlamak istiyorsanız ("diğerlerinin hangi derleyiciyi veya IDE'yi kullanmak istediklerine karar vermesine izin verin" gibi), o zaman IDE'nizin "onunla başa çıkmasına" izin vermekten başka bir derleme sistemi öğrenmelisiniz.

Farklı platformlar için programlamak istiyorsanız, kesinlikle yaygın bir derleme sistemi kullanmanız gerekir.

Bu yine de otomatik olarak oluşturulan Makefiles'in nasıl çalıştığını bilmek zorunda olduğunuz anlamına gelmiyor. Sadece derleme sistemi için giriş dosyalarının nasıl çalıştığını bilmek zorundasınız. Bunlar bazen benzer bir sözdizimine sahip olabilir.


Şahsen Makefiles'i çok seviyorum ve onları birçok şey için kullanıyorum. Sadece kod derleme değil. Oluşturduğum her büyük pdf (LaTeX ile) ve birkaç görevi otomatikleştirmek için ihtiyacım olan her proje için bir Makefile oluşturuyorum (bina, paketleme, yükleme, kaynak havuzlarından bağımlılıkları güncelleme, manuel yedeklemeleri çekme / gönderme)

Ancak, terminal üzerinde çok çalışıyorum ve Linux ile çalışıyorum. Vim (güçlü metin editörü) ve konsol araçları dışında IDE olarak adlandırdığınız şeyi kullanmıyorum. Bu sizin için çok farklı olabilir.

Eğer sadece "güncelleme" / paket / upload / .. bir "proje" için farklı yeniden ortaya çıkan komutlar çalıştırmak zorunda şikayet ettiyseniz, o zaman Makefiles yazmayı öğrenmek sizin için yararlı bir şey olabilir.

Her şey için araçlarınız / GUI'leriniz / IDE'leriniz varsa ve kullanıyorsanız, bu bilgiden hiçbir şey alamayabilirsiniz.

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.