2012-09-22 12 views
6

के साथ मैकोज़ फ्रेमवर्क को लिंक नहीं कर सकता है, मैं सेमीकेक के साथ एक सबप्रोजेक्ट बनाने की कोशिश कर रहा हूं (यह एक xcode प्रोजेक्ट या आईफोन के लिए ऐप भी नहीं है, नतीजा क्रॉस-प्लेटफॉर्म कंसोल निष्पादन योग्य है, जिसमें # कुछ विरासत शामिल हैं http://www.vtk.org/Wiki/CMake:HowToUseExistingOSXFrameworksसीएमके

और इस मैक्रो:

macro(ADD_FRAMEWORK fwname appname) 
find_library(FRAMEWORK_${fwname} 
    NAMES ${fwname} 
    PATHS ${CMAKE_OSX_SYSROOT}/System/Library 
    PATH_SUFFIXES Frameworks 
    NO_DEFAULT_PATH) 
if(${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND) 
    MESSAGE(ERROR ": Framework ${fwname} not found") 
else() 
    TARGET_LINK_LIBRARIES(${appname} ${FRAMEWORK_${fwname}}) 
    MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}") 
endif() 
endmacro(ADD_FRAMEWORK) 

यह सीएमए में महत्वपूर्ण हिस्सा है सी ++ सार कक्षाएं, में उद्देश्य-C++)

लिखा से मैं मैक ओएस चौखटे से जोड़ने के लिए इस गाइड का उपयोग कर रहा keLists.txt

project(myprojectname) 
........ 
add_executable(mytarget src/mytarget.cpp) 

add_framework(CoreMedia mytarget) 
add_framework(CoreVideo mytarget) 
add_framework(AVFoundation mytarget) 
add_framework(Foundation mytarget) 
........ 

और वह है क्या मैं जब बनाने की कोशिश है:

WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/CoreMedia.framework". Targets may link only to libraries. CMake is dropping the item. 
WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/CoreVideo.framework". Targets may link only to libraries. CMake is dropping the item. 
WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/AVFoundation.framework". Targets may link only to libraries. CMake is dropping the item. 
WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/Foundation.framework". Targets may link only to libraries. CMake is dropping the item. 

यह वास्तव में इन सभी व्यवस्थाएं पाता है, लेकिन लिंक नहीं कर सकते, जो लिंकर त्रुटियों की एक बहुत कुछ पैदा करता है। मुझे पूरा यकीन है कि यही कारण है क्योंकि मैंने एक्सकोड का उपयोग करके टेस्टप्रोजेज बनाया है और इसमें वही त्रुटियां हैं जब तक कि मैं सभी आवश्यक ढांचे को जोड़ता हूं।

जब मैं सिर्फ

FIND_LIBRARY(COREMEDIA_LIB CoreMedia) 
... 

तो COREMEDIA_LIBNOTFOUND पर सेट किया जाता का उपयोग करें - क्या हो रहा है? :।/

मैं एक बहुत लेकिन कुछ नहीं लग रहा है :(काफी वहाँ खो

+1

ठीक है, इसे 'सेट (CMAKE_EXE_LINKER_FLAGS "-framework fm1-framework fm2 के साथ काम कर रहा है ..." ' http://stackoverflow.com/questions/822404/ क्यों नहीं है कैसे-टू-सेट-अप-सेमेक-टू-बिल्ड-ए-ऐप-द-आईफोन तरीके काम करते हैं? (उस मैक्रो के साथ उत्तर मैं वास्तव में उपयोग करने की कोशिश कर रहा हूं) – dreamzor

उत्तर

16

कि दुख की बात है कि कोई एक जवाब है :(इस पर कड़ी मेहनत कर रहा था googled और बात है: आप नहींframeworkname.framework से जोड़ने के लिए है TARGET_LINK_LIBRARIES, लेकिन fwname.framework/fwname फ़ाइल में फ़ोल्डर !!! अब यह उस तरह से काम करता है

बदली हुई मैक्रो यह है:।

macro(ADD_FRAMEWORK fwname appname) 
    find_library(FRAMEWORK_${fwname} 
    NAMES ${fwname} 
    PATHS ${CMAKE_OSX_SYSROOT}/System/Library 
    PATH_SUFFIXES Frameworks 
    NO_DEFAULT_PATH) 
    if(${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND) 
     MESSAGE(ERROR ": Framework ${fwname} not found") 
    else() 
     TARGET_LINK_LIBRARIES(${appname} "${FRAMEWORK_${fwname}}/${fwname}") 
     MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}") 
    endif() 
endmacro(ADD_FRAMEWORK) 

आशा है कि यह हो जाएगा किसी के लिए उपयोगी ...

+0

ऐसा लगता है कि "अन्य लिंकर ध्वज" AKA OTHER_LDFLAGS में ढांचे को जोड़ना है, लेकिन यह शीर्षलेख "शीर्षलेख खोज पथ" AKA HEADER_SEARCH_PATHS में कुछ भी नहीं जोड़ता है, इसलिए मेरा कोड UIKit/UIKit.h नहीं ढूंढ सकता सुझाव? – Emmanuel

+0

मेरे मामले में, न तो OTHER_LDFLAGS सेट हैं (या, ऐसा लगता है कि वे खाली मान पर सेट हैं, क्योंकि एक्सकोड बिल्ड सेटिंग्स फलक में योग्यता बोल्ड है। – lef