2010-01-01 50 views
2

我怎樣才能爲只有DLL的版本指定一些唯一的標誌。默認情況下,libtool添加-DDLL_EXPORT,對於遵循GNU慣例的大多數項目來說都不錯,但是如果我工作,例如使用Boost,我可能需要爲我的庫標誌指定:-DDLL_EXPORT -DBOOST_ALL_DYN_LINK僅用於DLL的構建,有時候我還是希望有條件構建,所以我需要一些特定的DLL/SO構建定義。是否可以爲DLL/SO構建指定特定的標誌/定義?

不幸的是,我不能找到一種方式如何使用libtool來做到這一點,我應該使用哪些標誌?

措施:甚至不要試圖建議遷移到CMake。

例子:

我用foo庫鏈接到酒吧和要求-DBAR_EXPORTS以獲取唯一的動態庫符號。

有什麼樣

libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS 

任何人?

替代解決方案:(相當難看)

創建一個文件`defines.h

#if defined(PIC) || defined(DLL_EXPORT) 
#define BAR_EXPORTS 
#endif 

然後:

libfoo_la_CXXFLAGS += -include defines.h 

醜,但應該工作。

回答

0

您可以在默認情況下

LT_INIT([disable-shared]) 

禁用建設共享庫,那麼你可以使用AM_CONDITIONAL--enabled-shared合併,並設置額外的定義,如果共享庫被明確要求。 IOW,可以建立靜態或共享,但不能同時建立。

+0

沒有其他方法嗎? – Artyom 2010-01-24 07:36:43

+0

@Artyom也許有,但我不知道它。我只在Unix上使用Autotools,並且避免在Windows上使用它來構建DLL。 – mloskot 2010-01-24 15:03:58

0

不是很漂亮,但你可以使用conditional來檢查是否定義了DLL_EXPORT,並且它是否定義了你需要的其他對象?

我對自動工具不太好,我更喜歡CMake,但是您似乎完全反對。

+0

'am_conditional'是全局項目,但是,通常當您使用libtool構建時,您將構建靜態庫和共享庫。所以這不是真正的解決方案。 – Artyom 2010-01-21 20:35:51

相關問題