這兩天在 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
首先清除參數,而後點擊 Debug/Release 旁邊的 (+) 按鈕,添加一個條件編譯參數,並輸入參數設定值:code
但在 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 工程和條件編譯參數,能夠參考這篇文章:The Unofficial Guide to xcconfig files 。