8

私はcmakeでサブプロジェクトを構築しようとしています(これはxcodeプロジェクトでも、iphone用のアプリでもありません。その結果、クロスプラットフォームのコンソール実行可能ファイルになります。これには、Objective-C ++で記述されたC++抽象クラスから継承されたものが含まれます

私はこのガイドを使用してmacosフレームワークをリンクしています: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)

これは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)
........

そして、それは私が構築しようとしたときに持っているものです:

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.

実際にはこれらすべてのフレームワークを検出しますが、リンクできないため、多くのリンカーエラーが発生します。XCodeを使用してtestprojを作成し、必要なすべてのフレームワークをリンクするまで同じエラーが発生するため、これが理由であると確信しています。

使うだけで

FIND_LIBRARY(COREMEDIA_LIB CoreMedia)
...

次に、COREMEDIA_LIBに設定されNOTFOUNDます-何が起こっているのですか?:/

私はたくさんググったが何もなかった:(そこではほとんど失われた感じ。

4

1 に答える 1

23

了解しました。のフォルダではなく、ファイルをリンクする必要があります。今ではそのように機能します。frameworkname.frameworkTARGET_LINK_LIBRARIESfwname.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)

それが誰かのために役立つことを願っています...

于 2012-09-24T16:47:21.173 に答える