Xcode 利用 Target 機制定製構建過程的一次嘗試

    標題太拗口了。事情是這樣的,之前對 Target 有所瞭解,可是沒有自己運用過,剛巧有個事情,我覺得可以藉助 Target 機制,就動手實踐了一下,今天總結一下。這個事情是我們有個庫不支持 x86 平臺,導致我們的 app 不能用模擬器調試。用這個庫是個非常邊緣的業務,所以採取方案是自定義一個 Target,構建出沒有這塊業務和這個庫的產物用,然後用模擬器調試。(用兩個分支顯然不如用兩個 Target 好,因爲前者相當於維護兩套代碼,需要操心同步問題,Target 核心是兩套不同的構建配置。)(讓這個庫支持 x86 平臺是最先想到的,不過這個非常邊緣的業務已在下線邊緣,就不去推動別人改了,自己兼容掉了)

    首先說,如何不編譯這塊業務的代碼。將這塊業務的相關代碼用#if XXSDK #endif 包圍。在模擬器 Target Build Settings 下面設置預編譯宏,如下所示:
在這裏插入圖片描述
    那麼相關業務代碼就不會編譯。

    然後,修改模擬器 Target Build Setting 下面的 Other Linker Flags 配置,如下所示:
在這裏插入圖片描述
    這個配置直接決定構建時會 link 哪些庫,可以在這裏進行手動刪減。**如果有個庫從這個被排除了,構建的過程中還是被 link,可能是 $(inherited) 導致的。**打開構建日誌可以看到完整的 Link 命令,如下所示:
在這裏插入圖片描述
    可以通過your/path/clang++ -help 的方式去查看這個命令的註釋:

-L <dir>                Add directory to library search path
-F <value>              Add directory to framework include search path

    如果你依賴的庫沒有自動構建,可以自己手動構建,New Scheme 選擇你想構建的庫的 Target,然後 Build,注意 Build 的時候的 Device 是真機還是模擬器,會影響你構建的產物,因爲大部分 Debug 模式下 Build Active Architecture Only 標誌是 Yes,(生成產物的目錄也不一樣,Derived Data 目錄是分模擬器和真機的)。如何需要依賴的庫自動構建,可以把相應的 Target 加到 Target Dependencies 下面,或者加到 Link Binary With Libraries 下面並打開 Find Implicit Dependencies(Edit Scheme - Build - Build Options)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章