2012-09-22 22 views
6

Estoy tratando de construir un subproyecto con cmake (es no un proyecto xcode o incluso una aplicación para iphone, el resultado es un ejecutable de consola multiplataforma, que #include algunos heredados de las clases abstractas C++, escritos en Objective-C++)No puedo vincular marcos de MacOS con CMake

estoy usando esta guía para enlazar mac marcos OS: http://www.vtk.org/Wiki/CMake:HowToUseExistingOSXFrameworks

y esta macro:

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) 

esta es la parte importante en CMa 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) 
........ 

Y eso es lo que he cuando se trata de construir:

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. 

En realidad, busca todos estos marcos, pero no se puede vincular, lo que produce una gran cantidad de errores de enlace. Estoy bastante seguro de que esa es la razón porque hice un testproj usando XCode y tiene los mismos errores hasta que vinculé todos los frameworks necesarios.

Cuando sólo tiene que utilizar

FIND_LIBRARY(COREMEDIA_LIB CoreMedia) 
... 

continuación COREMEDIA_LIB se establece en NOTFOUND - lo que está pasando? :/

Busqué en Google mucho, pero nada :(Sintiéndose casi perdió allí

+1

Bueno, tengo trabajo con 'establecidos CMAKE_EXE_LINKER_FLAGS ("FM2 -framework FM1-marco ..."' ¿Por qué el http://stackoverflow.com/questions/822404/ ¿Cómo funciona? ¿Cómo funciona? ¿Cómo funciona el camino? ¿Cómo funciona? (la respuesta con esa macro en realidad estoy tratando de usar) – dreamzor

Respuesta

16

Eso es triste que nadie respondió :(estaba trabajando duro en esto y tiene la cosa:. Tiene que vincular NO la frameworkname.framework carpeta en el TARGET_LINK_LIBRARIES, pero el archivo fwname.framework/fwname !!! Ahora funciona de esa manera

la macro cambiado es la siguiente:.

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) 

Esperamos que sea útil para alguien ...

+0

Esto parece agregar los marcos en los "Otros Indicadores de Enlazador" AKA OTHER_LDFLAGS pero no agrega nada al encabezado "Rutas de Búsqueda de Encabezado" AKA HEADER_SEARCH_PATHS así que mi código no puede encontrar UIKit/UIKit.h. Sugerencias? – Emmanuel

+0

En mi caso, ni los OTHER_LDFLAGS están configurados (o, parece que están configurados en valores vacíos, ya que la etiqueta en el panel de configuración de Xcode Build está en negrita. – lef

Cuestiones relacionadas