2011-11-09 28 views
39

Tôi muốn biên dịch dự án của mình bằng autoconf/automake. Có 2 điều kiện quy định tại configure.ac tôiCách viết nhiều điều kiện trong Makefile.am bằng "else if"

AM_CONDITIONAL(HAVE_CLIENT, test $enable-client -eq 1) 
AM_CONDITIONAL(HAVE_SERVER, test $enable-server -eq 1) 

Tôi muốn tách riêng _LIBS từ những 2 điều kiện trong Makefile.am

if HAVE_CLIENT 

libtest_LIBS = \ 

    $(top_builddir)/libclient.la 

else if HAVE_SERVER 

libtest_LIBS = \ 

    $(top_builddir)/libserver.la 

else 

libtest_LIBS = 

endif 

nhưng else if HAVE_SERVER không hoạt động.

Cách viết 'else if' trong makefile.am?

Trả lời

3

Như bạn đã khám phá, bạn không thể làm điều đó. Bạn có thể làm:

libtest_LIBS = 

...

if HAVE_CLIENT 
libtest_LIBS += libclient.la 
endif 

if HAVE_SERVER 
libtest_LIBS += libserver.la 
endif 
+0

Vâng, điều này là tốt. Cảm ơn bạn đã trả lời, nhưng thực sự tôi có 3 điều kiện. KHÁCH HÀNG, SERVER, không CLIENT-không phải SERVER. Tôi không biết cách thêm điều kiện thứ 3 vào mã của mình. – Wind

+0

Thực tế có 4 điều kiện wrt AM_CONDITIONAL:! CLIENT &&! SERVER,! CLIENT && SERVER, CLIENT && SERVER, CLIENT &&! SERVER. Câu trả lời này sẽ làm việc với tất cả các điều kiện này. Đối với "điều kiện thứ 3" (! CLIENT &&! SERVER) libtest_LIBS được đặt thành giá trị bạn muốn trong 'else if'. – ldav1s

13

tôi sẽ chấp nhận ldav1s' câu trả lời nếu tôi là bạn, nhưng tôi chỉ muốn chỉ ra rằng 'else if' có thể được viết về 'khác và' nếu trong bất kỳ ngôn ngữ: (. các thụt đầu dòng là cho rõ ràng Đừng thụt dòng, họ sẽ không làm việc.)

if HAVE_CLIENT 
    libtest_LIBS = $(top_builddir)/libclient.la 
else 
    if HAVE_SERVER 
    libtest_LIBS = $(top_builddir)/libserver.la 
    else 
    libtest_LIBS = 
    endif 
endif 

đang
+0

Tôi đã thử cái này, nhưng thất bại. Có thể Makefile.am không hỗ trợ đệ quy nếu điều kiện. – Wind

+0

Bạn đã xóa thụt đầu dòng chưa? Tất cả những tuyên bố được cho là bắt đầu trong cột 1. – ptomato

+0

Xin lỗi, tôi đã không xóa thụt đầu dòng, tôi sẽ thử nó. – Wind

72

ptomato cũng có thể được viết một cách sạch như:

 
ifeq ($(TARGET_CPU),x86) 
    TARGET_CPU_IS_X86 := 1 
else ifeq ($(TARGET_CPU),x86_64) 
    TARGET_CPU_IS_X86 := 1 
else 
    TARGET_CPU_IS_X86 := 0 
endif 

này không trả lời câu hỏi OP nhưng vì nó là kết quả hàng đầu trên google, tôi thêm nó ở đây trong trường hợp nó rất hữu ích cho bất cứ ai khác.

+7

nhưng ở đây bạn cần phải đặt hai 'endif' với nhau ở cùng một mức độ thụt lề, mà hoàn toàn sẽ không nhìn tốt hoặc – amc

+1

@amc trong ví dụ trên một' endif' là đủ, mà tôi vừa thêm vào. Vấn đề với thụt lề được đưa ra trong mọi trường hợp (khi sử dụng khối 'else' lớn hơn/lồng nhau). – blueyed

9
ifeq ($(CHIPSET),8960) 
    BLD_ENV_BUILD_ID="8960" 
else ifeq ($(CHIPSET),8930) 
    BLD_ENV_BUILD_ID="8930" 
else ifeq ($(CHIPSET),8064) 
    BLD_ENV_BUILD_ID="8064" 
else ifeq ($(CHIPSET), 9x15) 
    BLD_ENV_BUILD_ID="9615" 
else 
    BLD_ENV_BUILD_ID= 
endif 
1
 
ifdef $(HAVE_CLIENT) 
libtest_LIBS = \ 
    $(top_builddir)/libclient.la 
else 
ifdef $(HAVE_SERVER) 
libtest_LIBS = \ 
    $(top_builddir)/libserver.la 
else 
libtest_LIBS = 
endif 
endif 

LƯU Ý: KHÔNG thụt nếu sau đó nó không có tác dụng!

Các vấn đề liên quan