Xcode 設置條件編譯參數

這兩天在 Xcode 工程中整合 LuaJIT,遇到一個小問題。html

根據 LuaJIT 的文檔 (Embedding LuaJIT 章節),在 Mac x86_64 環境下編譯時,必須指定 Linker Flags: -pagezero_size 10000 -image_base 100000000架構

問題是在 Xcode 中,若是你直接修改 Other Linker Flags,那麼全部架構編譯時都會使用這個參數。假如是一個 iOS 工程,那麼實際上這個工程存在四種架構:iphone

  • armv7 - 32bit ARM for iOS Device編輯器

  • arm64 - 64bit ARM for iOS Deviceide

  • i385 - 32bit X86 for iOS Simulatorui

  • x86_64 - 64bit X86 for iOS Simulatorlua

因此以下圖這樣指定參數是不行的:spa

Set Other Linker Flags.png


設置條件編譯參數

首先清除參數,而後點擊 Debug/Release 旁邊的 (+) 按鈕,添加一個條件編譯參數,並輸入參數設定值:code

Add Conditional Flags.png

但在 Xcode 裏沒法直接指定咱們須要的編譯條件。因此咱們須要從 Xcode 裏關閉工程文件(確保工程文件已經保存),而後用文本編輯器打開工程的 project.pbxproj 文件。htm

project.pbxproj 文件在 Xcode 工程中。能夠在 Finder 裏右鍵點擊 Xcode 工程,而後選擇菜單「查看包內容」。

全文搜索輸入的編譯參數(注意參數會按照空格分割爲多行,因此能夠只搜索其中一個參數),找到以下內容:

"OTHER_LDFLAGS[arch=*]" = (
    "-pagezero_size",
    10000,
    "-image_base",
    100000000,
);

將其中的 [arch=*] 修改成 [sdk=iphonesimulator*][arch=x86_64],而且保存文件。

修改完畢後,用 Xcode 從新打開工程,能夠看到編譯條件已經變成了:

Xcode Project Settings.png

關於 Xcode 工程和條件編譯參數,能夠參考這篇文章:The Unofficial Guide to xcconfig files

相關文章
相關標籤/搜索