2012-04-17 11 views
6

tengo el siguiente problema con configure.ac:Adición de una ruta a AC_CHECK_LIB

Me gustaría añadir una ruta de búsqueda de biblioteca porque las bibliotecas tengo que usar están en algunas carpetas locos. Mi idea es hacer esto con una opción:

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

Si alguien especifica la ruta de la biblioteca me gustaría por supuesto gustaría ver si la biblioteca se puede encontrar:

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

Sin embargo, me gustaría agregue los CPLEX_LIBS a la ruta de búsqueda de biblioteca de AC_CHECK_LIB. ¿Es esto de alguna manera posible?

Respuesta

14

Es responsabilidad del usuario indicar al script de configuración dónde se encuentran las bibliotecas. Hay muchas opciones disponibles para el usuario, con el ser más común:

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

No hay absolutamente ninguna razón para que el mantenedor de modificar los scripts de construcción en absoluto para dar cabida a un usuario en este punto, y muchas buenas razones para no tratando de hacer nada Si usted (como usuario) encuentra que sus bibliotecas se encuentran en muchas ubicaciones, puede configurar LDFLAGS en su entorno o en un config.site. Su cadena de herramientas probablemente tenga otros mecanismos (por ejemplo, si está utilizando gcc puede simplemente configurar LIBRARY_PATH). La infraestructura provista por autoconf ya proporciona muchos mecanismos para tratar este problema, y ​​es mejor que el mantenedor del paquete no reinvente la rueda y proporcione interfaces no estándares.

Ahora que he argumentado que no debe hacer lo que está tratando de hacer, le diré cómo hacerlo. AC_CHECK_LIB utilizará el valor en LDFLAGS para su búsqueda, por lo que puede hacer:

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

y esto es incorrecto porque ahora tiene una bandera -l en LDFLAGS, pero -l argumentos pertenecen en LIBS. Además, si va a tener otra biblioteca, libfoo y $ FOO_LIBS apuntando a una ubicación diferente, simplemente no hay forma de eliminar la ambigüedad: LDFLAGS obtendrá -L/cplex y -L/foo y el usuario no sabrá cuál viene primero y no podrá garantizar el enlace entre una biblioteca y otra. En resumen, no use CPLEX_LIBS: eduque a su usuario para usar LDFLAGS. Además, es más conveniente para el tipo:

configure LDFLAGS='-Lpath1 -Lpath2' 

de lo que es escribir

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

y el segundo ofusca las cosas y conduce a una población sin educación. Nunca entendí por qué a la gente le gusta poner estas opciones --with-lib =/p/a/t/h en sus compilaciones: no proporcionan nada útil.

Cuestiones relacionadas