2012-02-01 14 views
5

Czy istnieje jakiś typ if/else statemant zgodny z GNU make i Berkley make (freeBSD)?make & gmake compatible if else statment

GNU make:

ifeq ($(BUILD_TYPE), debug) 

Berkley Producent:

.ifdef (BUILD_TYPE) 
+2

Pamiętaj, że te dwie linie NIE sprawdzają tego samego! –

+0

to jedyne przykłady składni make & gmake. pytania są powyżej. GNU "ifeq" jest ".if" berkley zrobić odpowiednik. wiem to. – abrahab

+0

Dlaczego nie używać 'automake' i nie poradzić sobie z tymi warunkami? –

Odpowiedz

5

Nr Najlepsze co możesz zrobić, to użyć zawierać pliki z budowanych nazwami, jak:

include $(BUILD_TYPE).mk 

gdzie BUILD_TYPE będzie "debugować" lub cokolwiek innego. Z pewnością nie jest to tak potężne, jak w przypadku/else, ale potrafi wykonać ograniczony zestaw rzeczy w przenośny sposób.

Generalnie jest prawie niemożliwe, aby napisać przenośny plik Makefile, który używa dowolnej cechy bardziej wyrafinowanej niż podstawy udostępniane przez POSIX. Składnia makefile jest tak luźna i swobodna, a jednak funkcje oferowane przez tradycyjną markę i standard POSIX są tak anemiczne, że większość producentów stworzyła dużą liczbę niekompatybilnych rozszerzeń.

Ogólnie rzecz biorąc, gdy ludzie się nad tym zastanawiają, polecam, aby albo użyli automake, który zajmuje się żmudną pracą pisania przenośnych plików Makefile dla ciebie, albo zobowiązują się do jednej lub drugiej strony i po prostu wymagają od ludzi, aby ją zbudowali, oni tego nie mają. GNU make, na pewno, będzie działał na wielu różnych platformach ... nawet na platformach innych niż POSIX.