2010-01-26 8 views
9

W moich plikach c/C++ istnieje wiele #define. Jako przykład:Jak zdefiniować #define w moich plikach Make

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

Czy możesz mi powiedzieć jak mogę zmodyfikować moje Makefile.in tak, że mam te #define w WSZYSTKIE pliki podczas kompilacji?

Dziękuję.

+1

zamiast tego należy rozważyć modyfikację pliku configure.ac lub Makefile.am. Makefile.in nie jest przeznaczony do spożycia przez ludzi. – Anycorn

+0

@unknown: configure.ac będzie musiał ustawić wartości gdzieś w Makefile.in. Makefile.in jest częściowo przeznaczony do spożycia przez ludzi - chyba że używasz Automake lub czegoś innego do wygenerowania Makefile.in. –

Odpowiedz

12
-DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

Można przekazać te w CPPFLAGS,

CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

lub zrobić nową zmienną

CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

i przekazać go do CPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)

Ci wreszcie przejdzie do gcc/g++ -D...

$(CC) $(CPPFLAGS) 
+3

Flagi preprocesora afaik powinny w rzeczywistości przejść do 'CPPFLAGS' – Christoph

+0

Masz rację, przeoczyłem tagi jako C C++, edytowałem – YOU

+0

@ s.mark - dang, uderzyłeś w gwóźdź w głowę ... To właśnie Próbowałem dowiedzieć się .... moja odpowiedź była blisko, ale nie wystarczająco blisko :) – t0mm13b

1

Dodaj poniższą linię do makefile:

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

ten ma służyć jako przykład, wystarczy tylko dodać kolejny zdefiniować do DEFINES zmiennej, która pobiera odwołanie na linii, jak pokazano $(cc) -D$(DEFINES) w którym make automatycznie rozszerzy zmienną i skompiluje te, które są #ifdef d.

Dzięki R Samuela Klatchko za wskazanie mały źle ... to specjalnie dla marki GNU, można użyć addprefix czy prawidłowo to zrobić ($ (addprefix -D, $ (określa))).

+0

To doda tylko-D do pierwszej definicji (więc da wynik '-DLIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG'). Jeśli posiadasz GNU make, możesz użyć addprefix do poprawnego działania ('$ (addprefix -D, $ (DEFINES))'). –

+0

@R Samuel Klatchko: Edytowałeś odpowiedź, aby odzwierciedlić Twój komentarz! Pozdrowienia dla głów! :) – t0mm13b

+0

Zwykle, CC ($) lub $ {CC} będą miały duże litery CC, a nie małe litery. –

0

Nie zmieniaj swojego Makefile.in. (i rozważ użycie Automake i konwersję Makefile.in do znacznie prostszego Makefile.am). Celem tych #defines jest umożliwienie skryptowi konfiguracyjnemu zdefiniowania ich w config.h, a pliki źródłowe powinny #include <config.h>. Jeśli utrzymujesz pakiet, będziesz musiał napisać testy w pliku configure.ac, aby określić, czy używany system ma zainstalowany libvncserver z obsługą jpeg i zlib. Jeśli zmodyfikujesz plik Makefile.in, aby zawsze je definiował, to przyjmujesz założenie, że twój kod jest budowany tylko na komputerach, na których te funkcje są dostępne. Jeśli podejmiesz takie założenie, powinieneś jeszcze dodać kontrole do configure.ac, aby to potwierdzić, i mieć skrypt configure, jeśli nie zostaną spełnione zależności.

Powiązane problemy