¿Es posible especificar banderas específicas / definir para el DLL / SO acumulación?
-
22-09-2019 - |
Pregunta
¿Cómo puedo especificar banderas únicas para DLL sólo construye. Por defecto libtool añade -DDLL_EXPORT
lo cual está bien para la mayoría de los proyectos que siguen las convenciones de GNU, pero si trabajo, por ejemplo, con el impulso que puede tener que especificar para mis banderas de biblioteca: -DDLL_EXPORT -DBOOST_ALL_DYN_LINK
de DLL sólo construye, también a veces quiero condicional construye así que necesitar algunos define específicas para DLL / SO de construcción.
Por desgracia, no puedo encontrar una manera de cómo hacer esto con libtool, qué parámetros se debe usar?
P.S:.. Ni siquiera tratar de sugerir a moverse a CMake
Ejemplo:
Yo uso foo biblioteca que los enlaces a la barra y requiere -DBAR_EXPORTS para obtener símbolos de la única biblioteca dinámica.
¿Hay algo así como
libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS
¿Alguien?
Solución alternativa: (bastante feo)
Crear un archivo `defines.h
#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif
Y a continuación:
libfoo_la_CXXFLAGS += -include defines.h
feo pero debería funcionar.
Solución
Puede desactivar la construcción de la biblioteca compartida por defecto con
LT_INIT([disable-shared])
A continuación, se puede utilizar en combinación con AM_CONDITIONAL
--enabled-shared
y establecer las definiciones adicionales si se solicita explícitamente biblioteca compartida. OIA, habilite la construcción estática o compartido, pero no ambas al mismo tiempo.
Otros consejos
No es que bonito, pero podría utilizar un condicional para comprobar si se ha definido DLL_EXPORT y si se trata de definir los demás que necesita?
No soy tan bueno con autotools, prefiero CMake pero pareces muy en contra de eso.