簡體   English   中英

在OS X上從XCode移到GCC

[英]Moving away from XCode to GCC on OS X

我有一個基於Snow Leopard,XCode 3.2.6構建的代碼庫,並且僅針對10.5 SDK 32 / 64bit(僅限INTEL)。 工作正常。 我在虛擬機中執行此操作。

現在,我已經GCC 4.7.1並在Mountain Lion上工作,並安裝了XCode 4.4工具,這樣我就可以擁有所有必需的庫,依賴項。

我想從XCode轉到GCC,仍然以10.5 SDK為目標,甚至10.6 SDK也可以。

我必須創建一個MakeFile嗎? 是否可以從XCode導出一個? 我不了解從頭開始創建MakeFile。

我知道我可以將-mmacosx-version-min=10.5附加到gcc命令中,我也必須告訴它64位。

您在混淆多個不同的事物。

如果您想從Xcode切換到vim,您可以…做。 如果您已經安裝了Xcode命令行工具,那么在您的路徑上就已經有了gcc,make等,它們就可以正常工作,而您根本不必考慮Xcode。 實際上,您甚至可以安裝命令行工具,而無需使用其他Xcode。

如果要從Xcode工具鏈切換到其他工具鏈,或使用混合工具,則可以這樣做。 您已經安裝了gcc 4.7.1。 好的,現在使用gcc_select ,或export CC=/usr/local/bin/gcc-4.7.1 ,或者在您的makefile中或任何您想要的內容中硬編碼路徑。 這與在任何其他POSIX平台上具有多個工具鏈沒有什么不同。

如果要在不運行Xcode的情況下構建Xcode項目,則可以從命令行使用xcodebuild

如果要將現有項目從Xcode轉換為Makefile(或cmake或其他格式),則必須手動執行。 通常,這並不難,除非項目非常復雜或做很多Xcode特定的事情。 您可以從生成輸出中看到Xcode正在運行的所有實際命令。

如果您想學習如何創建Makefile,那里有很多很好的教程。 但是第一個問題是:為什么? 學習更簡單的東西(例如cmake)是可以接受的,還是學習make的全部目的?

如果要進行基於SDK的開發,請傳遞-arch ,並使用其他特定於Apple的擴展程序將gcc與gcc 4.7.1配合使用……那么,您就不能這樣做。 這些gcc擴展尚未移植到任何較新版本。 如果您想做一些工作來自己移植,我敢肯定有些人會喜歡的,但這是很多工作。

而且,如果您想使用gcc 4.7.1構建其他人的代碼,則很有可能也無法立即使用。 大多數Mac專用的開源項目都依賴於Apple gcc擴展,並且大多數跨平台的開源項目都具有自動工具設置,這些設置將檢測您是否在Mac上,並具有Xcode命令行工具並進行設置以依賴於這些工具。擴展。

那么,您對其中哪些有疑問?


還有一件事:

macosx-version-min設置與SDK完全不同,且互為補充。

要將SDK設置為10.5,您必須傳遞-isystem $PATH_TO_10_5_SDK/usr/include ,並可能為/usr下的其他目錄-isystem附加的-isystem標志(例如,對於C ++ stdlib),有時將-L標志傳遞給鏈接器,有時-F標志指向編譯器和/或鏈接器。

您還必須擁有 SDK。 獲得10.5 SDK的唯一方法是使用Xcode 3.2.6或更早版本-我認為您甚至都不能在Mountain Lion上安裝它。 另外,來自Xcode 3.2.6的10.5 SDK不知道如何在10.6之后的構建系統上工作,因此您必須手動對其進行修改(主要是創建一堆符號鏈接,使它們將10.7和10.8視為與10.6)。 而且,如果您使用的是非Apple的gcc,嘗試查找諸如編譯器特定的標頭(尤其是C ++)之類的各種內容也會感到困惑,因此您需要對其進行更多破解。

為什么這么難? 因為您幾乎不需要這樣做,所以Apple特別建議您不要這樣做。 它是從過去10.4天內建議做事的方式中遺留下來的-但是僅僅因為它存在就並不意味着您應該使用它。

-macosx-version-min=10.5是構建可在10.5上運行的代碼的正確方法。 您可以並且實際上應該將其與與您的操作系統匹配的SDK一起使用(如果您希望能夠使用下一版本的操作系統中的功能,甚至可以使用更新的SDK)。 同樣,只有clang和Apple擴展的gcc才支持此標志。 但這使SDK中的所有內容都能以向后兼容的方式神奇地工作。 當然,除了在10.6或更高版本中添加的新功能外,如果嘗試在10.5機器上進入全屏模式,則只會出現異常或崩潰。 Apple有相當不錯的文檔,說明哪些API添加了哪個版本,以及檢查每種API(可可,CoreFoundation和POSIX)的正確方法。 當然,您將需要一台真正的10.5機器(或VM)進行測試。 此外,C ++ stdlib(僅適用於10.5)還有一些錯誤,還有少數類似OpenSSL的庫,Apple不再建議任何人針對該系統副本進行構建以進行分發。 但是,與嘗試使用10.5 SDK進行構建相比,它仍然容易得多。 這就是蘋果明確建議的。

如果要避免在Xcode中工作,而又想以相同的方式構建事物,則可以使用命令行工具xcodebuild ,它將以與Xcode相同的方式構建Xcode項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM