2012-04-17 54 views
6

Tôi gặp vấn đề sau với configure.ac:Thêm đường dẫn tới AC_CHECK_LIB

Tôi muốn thêm đường dẫn tìm kiếm thư viện vì thư viện tôi phải sử dụng nằm trong một số thư mục điên. Ý tưởng của tôi là để làm điều này với một tùy chọn:

AC_ARG_WITH([cplex-lib-path], 
    [AS_HELP_STRING([--with-cplex-libs], [location of the CPLEX library])], 
    [CPLEX_LIBS="-L$withval --lcplex"], 
    []) 

Nếu ai đó chỉ đường dẫn thư viện tôi dĩ nhiên muốn xem nếu thư viện có thể được tìm thấy:

AC_CHECK_LIB([cplex], [CPXcreateprob], [], 
[ 
    AC_MSG_ERROR([Could not find CPLEX library]) 
]) 

Tuy nhiên, tôi muốn thêm CPLEX_LIBS vào đường dẫn tìm kiếm thư viện của AC_CHECK_LIB. Điều này bằng cách nào đó có thể?

Trả lời

14

Trách nhiệm của người dùng là thông báo cho tập lệnh định cấu hình nơi thư viện. Có rất nhiều tùy chọn có sẵn cho người sử dụng, với các phổ biến nhất:

configure LDFLAGS=-L/p/a/t/h 

Có hoàn toàn không có lý do cho nhà duy trì để thay đổi xây dựng các kịch bản ở tất cả để chứa một người dùng trên thời điểm này, và nhiều lý do chính đáng cho không cố gắng làm gì cả. Nếu bạn (với tư cách là người dùng) thấy rằng các thư viện của bạn ở nhiều vị trí, bạn có thể đặt LDFLAGS trong môi trường của mình hoặc trong một config.site. Chuỗi công cụ của bạn có thể có các cơ chế khác (ví dụ: nếu bạn đang sử dụng gcc, bạn có thể chỉ cần đặt LIBRARY_PATH). Cơ sở hạ tầng được cung cấp bởi autoconf đã cung cấp nhiều cơ chế để xử lý vấn đề này, và trình bảo trì gói tốt hơn là không phát minh lại bánh xe và cung cấp các giao diện không chuẩn.

Bây giờ tôi đã lập luận rằng bạn không nên làm những gì bạn đang cố gắng làm, tôi sẽ cho bạn biết làm thế nào để làm điều đó. AC_CHECK_LIB sẽ sử dụng giá trị trong LDFLAGS cho tìm kiếm của nó, vì vậy bạn có thể làm:

LDFLAGS="$LDFLAGS $CPLEX_LIBS"  # this is a bug 

và điều này là sai vì bây giờ bạn có một lá cờ -l trong LDFLAGS, nhưng -l tranh cãi thuộc về LIBS. Ngoài ra, nếu bạn sẽ có một thư viện khác, libfoo và $ FOO_LIBS trỏ đến một vị trí khác, không có cách nào để phân biệt: LDFLAGS sẽ nhận được -L/cplex và -L/foo và người dùng sẽ không biết cái nào đến trước và sẽ không thể đảm bảo liên kết với một thư viện so với thư viện khác. Tóm lại, không sử dụng CPLEX_LIBS: giáo dục người dùng của bạn sử dụng LDFLAGS. Ngoài ra, nó là thuận tiện hơn để loại:

configure LDFLAGS='-Lpath1 -Lpath2' 

hơn là gõ

configure --with-cplex=path1 --with-foo=path2 

và sau này hoang mang vật và dẫn đến một dân thất học. Tôi chưa bao giờ hiểu tại sao mọi người thích đặt các tùy chọn --with-lib =/p/a/t/h này vào trong các bản dựng của họ: chúng không cung cấp gì hữu ích.

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