E 'possibile specificare flag specifici / define per DLL / SO costruire?
-
22-09-2019 - |
Domanda
Come è possibile specificare alcune bandiere uniche per DLL costruisce solo. Per impostazione predefinita libtool aggiunge -DDLL_EXPORT
che va bene per la maggior parte dei progetti che seguono le convenzioni GNU, ma se io lavoro, per esempio, con Boost io possa essere necessario specificare per le mie bandiere libreria: -DDLL_EXPORT -DBOOST_ALL_DYN_LINK
per DLL costruisce solo, anche a volte voglio condizionale costruisce così ho bisogno di alcune definisce specifici per DLL / SO costruire.
Purtroppo non riesco a trovare un modo per fare questo con libtool, quali flag devo usare?
P.S:.. Non provare nemmeno a suggerire di passare a CMake
Esempio:
Io uso foo biblioteca che si collega al bar e richiede -DBAR_EXPORTS per ottenere i simboli per la libreria dinamica solo.
C'è qualcosa di simile
libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS
Chiunque?
Soluzione Alternativa: (abbastanza brutto)
Creare un file `defines.h
#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif
E poi:
libfoo_la_CXXFLAGS += -include defines.h
Ugly ma dovrebbe funzionare.
Soluzione
È possibile disattivare edificio libreria condivisa di default con
LT_INIT([disable-shared])
è possibile utilizzare in combinazione con AM_CONDITIONAL
--enabled-shared
e impostare le definizioni di extra se libreria condivisa è esplicitamente richiesto. IOW, abilitare la costruzione di statico o condiviso, ma non entrambi allo stesso tempo.
Altri suggerimenti
Non che bella, ma si potrebbe usare un condizionale per verificare se DLL_EXPORT è definito e se è di definire gli altri è necessario?
Non sono così bravo con autotools, preferisco CMake ma sembrano piuttosto che contro.