无法将MacOS框架与CMake链接

dre*_*zor 6 linker frameworks cmake ios

我正在尝试使用cmake构建一个子项目(它不是一个xcode项目,甚至不是iphone的应用程序,结果是跨平台的控制台可执行文件,其中#includes一些继承自C++抽象类,用objective-c ++编写)

我正在使用本指南链接mac os框架: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)
Run Code Online (Sandbox Code Playgroud)

这是CMakeLists.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)
........
Run Code Online (Sandbox Code Playgroud)

这就是我在尝试构建时所拥有的:

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.
Run Code Online (Sandbox Code Playgroud)

它实际上找到了所有这些框架,但是无法链接,这会产生很多链接器错误.我很确定这就是原因,因为我使用XCode制作了一个testproj,它有相同的错误,直到我链接了所有需要的框架.

我刚刚使用的时候

FIND_LIBRARY(COREMEDIA_LIB CoreMedia)
...
Run Code Online (Sandbox Code Playgroud)

然后COREMEDIA_LIB被设定为NOTFOUND- 发生了什么?:/

我google了很多但没有任何东西:(感觉很丢失那里.

dre*_*zor 17

这是可悲的,没有人回答:(在此努力工作,得到了一点:你必须链接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)
Run Code Online (Sandbox Code Playgroud)

希望它对某些人有用......