我正在爲我的gui api添加跨平臺剪貼板支持。我設法很好地在Windows上工作,現在我正在使用OSX。使用CMake鏈接到可可庫(C++與Objective-C混合)
我已經得到了我想要的功能,但文件是.mm。因此,當人們編譯我的GUI的OSX版本時,他們現在需要鏈接到可可庫。
有沒有人有如何使用cmake和混在C++與Objective-C的時候鏈接到可可的經驗?
感謝
我正在爲我的gui api添加跨平臺剪貼板支持。我設法很好地在Windows上工作,現在我正在使用OSX。使用CMake鏈接到可可庫(C++與Objective-C混合)
我已經得到了我想要的功能,但文件是.mm。因此,當人們編譯我的GUI的OSX版本時,他們現在需要鏈接到可可庫。
有沒有人有如何使用cmake和混在C++與Objective-C的時候鏈接到可可的經驗?
感謝
有其傳遞給GCC或鏗鏘,使目標C或Objective C++應用程序的編譯一些編譯器開關:
gcc -ObjC MySourceFile.m
gcc -ObjC++ MySourceFile.mm
clang -ObjC MySourceFile.m
clang -ObjC++ MySourceFile.mm
您指定的MacOSX的最低版本上您的應用程序可以使用下列選項運行:
gcc -ObjC++ -mmacosx-version-min=10.6
指定10.6,如果你要是想你的應用程序能與雪豹兼容。您還需要通過SYSROOT選項GCC或鐺,讓他們知道編譯哪個版本的SDK反對:
gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk
玩具明確創建架構與拱選項
gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64
如果單獨調用鏈接器ld,則需要將sysrootlib選項傳遞給ld。爲了生成一個動態鏈接的庫,你將dylib選項傳遞給ld。如果您將dynamiclib傳遞給gcc或clang,這將傳遞給ld。
gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64
要連結對Cocoa框架傳遞框架選項作爲鏈接器選項gcc和框架的名字:
gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -Wl,-framework,Cocoa
如果您使用C++標準庫,你將需要指定爲一個連接器選項與
-Wl,stdc++
當部署到MacOSX的10.7和鏗鏘可以使用的libC++ C++標準庫編譯。您將一個選項傳遞到編譯器和鏈接器:
-stdlib=libc++ -Wl,c++
因此產生從源這是對Cocoa框架鏈接庫,你會做以下使用gcc
gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -o MyLibrary.dylib -Wl,-framework,Cocoa MySourceFile.mm
希望這有助於。