Automake - Kaynak ağacı nasıl temiz tutar?


10

Kendimi oluşturmak için GNU otomatik araçlarını kullanan bir projem var. Ben kaynak dosyaları geçici dosyaları temiz tutabilirsiniz böylece autotools tüm sürümlü olmayan denetim dosyaları ayrı bir dizinde oluşturur, böylece değiştirmeye çalışıyorum. Bunun nasıl yapılacağı hakkında bir fikri olan var mı?


6
Sadece ağaç dışı bir yapı yapın: stackoverflow.com/questions/1311231/… ne yazık ki hala biraz kalıntı bırakıyor. CMBir gün deneyin.
Vitor Py

3
O gün geldi, o çirkin oturaktan cmake'ye geçmek bir saatten daha az sürdü ki bu çok daha temiz görünüyor.
vorad

1
CMake, autoconf'tan çok daha temizdir: aslında, ağaç dışı bir yapı CMake yapısının en yaygın yoludur. İyi seçim :)
Vitor Py

Kaynak ağacının üstünde, derleme işlemini cmake ile kontrol eden bir Makefile olması ne kadar olağan? Say yapmak çalışacaktır && .. markasını mkdir -p build && cd oluşturmak && cmake (belki gibi farklı hedeflere öylesine ve makyaj testi vs.).
vorad

Yaygın olmayan. CMake başka türlü değil, makefiles oluşturmalıdır! Gerçek kelime örnekleri için Mastering CMake veya VTK veya KDE oluşturma süreçlerinde bir kitap arayın. CMake'in büyük bir avantajı, markanın üstünde olmaktır: Visual Studio vcproj, nmake Makefiles, XCode vb. bir göz atın.
Vitor Py

Yanıtlar:


2

Autotools paketi, iyi bir nedenden dolayı çok sayıda sabit kodlanmış göreceli yol ve isme sahiptir. En iyi seçenek çıkışını Özetle ve örneğin içinde, sizin revizyon kontrolü ihmal olarak etiketlemek olduğu .cvsignore, .hgignoreya da svn:ignoreattibute. Bazı RCS, yinelenen joker karakterleri bile belirlemenizi sağlar.


4
Bu sabit kodlu bağıl yollara sahip olmak için iyi bir neden yoktur, o zaman bu 1970'lerin unix programlama tarzıdır.
Lothar

2

Çözüm: Kaynak Dışı Bir Yapı Yapın

  • Yorumlarda önerildiği gibi, kaynak dışı bir derleme yapabilirsiniz.
  • İlke: başka bir dizin, bir "yapı ağacı" oluşturmak, bu dizinden yapılandırma komut dosyasını çalıştırmak (göreceli veya mutlak yolla).

Otomatik kontrole sahip örnek

Örneğin, bu, GNU merhaba getirecek ve oluşturacak ve kaynak ağacın biraz değişip değişmediğini kontrol edecektir.

Kaynak ağacı hazırlama

Bu bölüm dizinleri getirir ve hazırlar.

{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}

Genel bölüm: projenizde yeniden kullanın

Bu bölüm diğer otokonfa dayalı projelerle kullanılabilir. Sadece çalıştırmadan önce projenize cd. Dikkat: bu rm, varyantlarla oynamak dikkatli olursanız, her durumda sorumlusunuz.

export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)

Bölümü kontrol et

Bu, derlemenin tamamen kaynak dışı olup olmadığını kontrol eder.

{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}

İşte bunu çıktı:

/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.

Bonus: root olmayan kurulum

Yukarıdaki --prefix="${MYPREFIX?}"bölüm isteğe bağlıdır. Hesabınızda yerel olan bir "make install" işlemine izin verir. Sistem genelinde geleneksel "sudo make install" istiyorsanız, kaldırabilirsiniz --prefix="${MYPREFIX?}".

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.