SORU
4 HAZİRAN 2010, Cuma


GNU Makefile tek bir kaynak dosyadan birkaç hedefleri oluşturma kuralı

Aşağıdaki yapmaya çalışıyorum. Bir program var, tek bir giriş dosyası alır ve iki çıkış dosyaları oluşturur foo-bin, Ara. Bunun için aptal Makefile bir kural olabilir:

file-a.out file-b.out: input.in
    foo-bin input.in file-a.out file-b.out

Ancak, bu iki hedefin aynı anda oluşturulacak herhangi bir şekilde make söylemez. Bu seri içinde make çalışırken iyi, ama büyük olasılıkla bir make -j16 ya da benzer bir muamele deli çalışırsa sorun yaratır.

Asıl sorun, böyle bir durum için uygun Makefile bir kural yazmak için bir yol var mı?Açıkça, bir DAG oluşturmak istiyorsunuz, ama bir şekilde GNU manuel bu davayı ele nasıl belirtmiyor.

İki kere aynı kodu çalışan ve tek bir sonuç üreten hesaplama zaman alır, çünkü söz konusu değildir, (sanırım: saat). Tek bir dosya çıktısı da sık sık bir veri dosyası sadece bir kısmını işlemek için nasıl bilmiyor hangi nesne yönelimli programlamada bir giriş olarak kullanıldığı için oldukça zor olurdu.

CEVAP
19 HAZİRAN 2010, CUMARTESİ


Hile birden çok hedefleri olan bir örüntü kuralı kullanmaktır. Bu durumda her iki hedef komutu tek bir çağırma tarafından oluşturulan üstlenecek.

all: file-a.out file-b.out
file-a%out file-b%out: input.in
    foo-bin input.in file-a$*out file-b$*out

Model kurallar ve kuralların yorumu arasındaki bu fark tam olarak mantıklı değil, ama bu gibi durumlar için yararlı ve el kitabında belirtildiği.

Bu hile çıktı dosyaları herhangi bir sayı isimleri % için bazı genel alt maç var olduğu sürece kullanılabilir. (Bu durumda ortak alt ".")

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AndyMcMillinTV

    AndyMcMillin

    6 HAZİRAN 2007
  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006