2009-11-24 160 views
0

我試圖通過定義條件靜態庫中鏈接。這在xcode中可能嗎? 基本上試圖在ifdefs中封裝庫特定代碼,因此可以在編譯時通過設置標誌來排除它。目標條件庫搜索路徑xcode

回答

1

不,C #define與庫鏈接處於不同的級別。

但是,你可以從一個自定義生成設置的值設置爲C #define(通過預處理宏構建設置),像BUILT_WITH_FOO,並設置你的OTHER_LDFLAGS構建設置基於該自定義生成設置爲好。

例如:

BUILT_WITH_FOO = foo 

GCC_PREPROCESSOR_DEFINITIONS_ = USING_FOO=0 
GCC_PREPROCESSOR_DEFINITIONS_foo = USING_FOO=1 
GCC_PREPROCESSOR_DEFINITIONS = $(GCC_PREPROCESSOR_DEFINITIONS_$(BUILT_WITH_FOO)) 

OTHER_LDFLAGS_ = -lsomething 
OTHER_LDFLAGS_foo = -lsomething -lfoo 
OTHER_LDFLAGS = $(OTHER_LDFLAGS_$(BUILT_WITH_FOO)) 

以上將讓你調整BUILT_WITH_FOO構建設置的唯一的價值選擇是否使用預處理宏和其它鏈接器標記變種,其名稱與尾隨_結束,或那些名字以尾隨_foo結尾的人。

+0

但這會解決我的問題嗎?或者,如果我在搜索路徑中有lib.a,但是在編譯時沒有引用它的代碼,那麼它的所有內容都會編譯進去? – drunknbass 2009-11-24 06:27:59

+0

未編譯靜態庫,它已鏈接。只是在搜索路徑中不足以導致它被鏈接;它需要在目標中的Link Frameworks&Libraries構建階段或OTHER_LDFLAGS(如上所示,即-lfoo)中指定。如果它不在其中,它將不會被鏈接。 – 2009-11-24 20:30:25