2010-01-26 23 views
9

C/C++ dosyamda birden çok #define vardır. Ben derleme sırasında TÜM dosyaları bu #define sahip olacak şekildeDosyalarımda #define öğesini tanımlayabilirim

#ifdef LIBVNCSERVER_HAVE_LIBZ 
    /* some code */ 
#ifdef LIBVNCSERVER_HAVE_LIBJPEG 
    /* some more code */ 

nasıl benim Makefile.in değiştirebilir lütfen bana: Örnek olarak?

Teşekkür ederiz.

+1

configure.ac veya Makefile.am dosyasını değiştirmeyi düşünebilirsiniz. Makefile.in insan tüketimine yönelik değildir. – Anycorn

+0

@unknown: configure.ac, Makefile.in'deki bir yere değerleri ayarlamanız gerekir. Makefile.in, Automake veya Makefile.in üretmek için başka bir şey kullanmadığınız sürece, kısmen insan tüketimi için tasarlanmıştır. –

cevap

12
-DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

Sen CPPFLAGS olanlar geçebileceği,

CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

veya yeni değişken

CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

yapmak ve CPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)

iletecek olanlar nihayet gcc/g++ -D...

geçecek olan
$(CC) $(CPPFLAGS) 
+3

afaik önişlemci bayrakları aslında 'CPPFLAGS' – Christoph

+0

gitmeli, C C++ etiketlerini gözden kaçırmışım, edildim – YOU

+0

@ s.mark - dang, oradaki çiviyi vurdun. Anlamaya çalışıyordum .... cevabım yakındı ama yeterince yakın değildi :) – t0mm13b

1

makefile için aşağıdaki satırı ekleyin: Bu bir örnek olarak hizmet etmektir

 
DEFINES=LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG 
... 
... further on in your makefile on the line where it says .... 
... 
    $(cc) ($(addprefix -D, $(DEFINES))) ..... 
... 
... 

, sadece başka hangi $(cc) -D$(DEFINES) gösterildiği gibi on line başvurulan alır DEFINES değişkene tanımlamak eklemek make, değişkeni otomatik olarak genişletecek ve #ifdef d olanları derleyecektir. Küçük bir yanlış işaret için

Teşekkür R Samuel'le Klatchko ... Bu yapmanız düzgün do addprefix kullanabilirsiniz GNU'nun marka için özel olarak olduğunu ($ (addprefix -D, $ (tanımlar)).

+0

Bu sadece ilk tanıma -D ekleyecektir (böylece -DLIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG' verecektir). Eğer GNU yapınız varsa, addprefix'i doğru bir şekilde kullanabilirsiniz ('$ (addprefix -D, $ (DEFINES))'). –

+0

@R Samuel Klatchko: Cevabınızı yorumunuzu yansıtacak şekilde düzenlediniz! Başları için alkış! :) – t0mm13b

+0

Normalde, $ (CC) veya $ {CC}, küçük harfle küçük harfle CC'ye sahip olacaktır. –

0

Makefile.in dosyanızı değiştirmeyin. (Automake kullanmayı ve Makefile.in'i çok daha basit bir Makefile.am'a dönüştürmeyi düşünün). #defines'in bütün noktası, configure betiğinin config.h dosyasında tanımlanmasını ve kaynak dosyalarınızın <config.h> #include olmasına izin vermektir. Eğer paketi sürdürüyorsanız, kullanılan sistemin jpeg ve zlib destekli libvncserver yüklü olup olmadığını belirlemek için configure.ac içinde testler yazmanız gerekecektir. Makefile.in'i her zaman tanımlamak için değiştirirseniz, kodunuzun yalnızca bu özelliklerin bulunduğu makinelerde oluşturulduğu varsayımını yapıyorsunuz demektir. Bu varsayımı yaparsanız, onaylamak için configure.ac dosyasına hala denetim eklemeniz ve bağımlılıklar karşılanmadığında configure betiğinin başarısız olması gerekir.

İlgili konular