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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top