2

Mac OS Xフレームワークの使用法をプログラムに追加しようとしています。このプログラムには、Objective-c++コードを含むいくつかのファイルが含まれています。

それはで動作しSET (CMAKE_EXE_LINKER_FLAGS "-framework CoreMedia -framework ... ")ますが、私はこの方法が本当に好きではなく、それはちょうど間違っているようです。

それは実際の追加のCMakeの部分ですが、それは機能せず、私は本当に何が欠けているのかわかりません:(私は

link_directories("${CMAKE_OSX_SYSROOT}/System/Library/Frameworks")
include_directories("${CMAKE_OSX_SYSROOT}/System/Library/Frameworks")

しかし、それはまったく役に立ちませんでした。コードは次のとおりです。

add_executable(myprogram src/myprogram.cpp)

FIND_LIBRARY(COREMEDIA_LIB NAMES CoreMedia)
FIND_LIBRARY(COREVIDEO_LIB NAMES CoreVideo)
FIND_LIBRARY(FOUNDATION_LIB NAMES Foundation)
FIND_LIBRARY(AVFOUNDATION_LIB NAMES AVFoundation)

target_link_libraries(myprogram ${COREMEDIA_LIB})
target_link_libraries(myprogram ${COREVIDEO_LIB})
target_link_libraries(myprogram ${FOUNDATION_LIB})
target_link_libraries(myprogram ${AVFOUNDATION_LIB})

それはcmakeエラーを生成します:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
AVFOUNDATION_LIB
linked by target "myprogram" in directory <some directory containing app>

<... other 3 are here aswell ...>
4

2 に答える 2

2

はい、わかった。PATHS変数をに指定する必要があります${CMAKE_OSX_SYSROOT}/System/Library。理由はわかりませんが、標準のフォルダだと思っていたのですが、このフォルダで自動的に見つけることができません...

したがって、次のように呼び出します。

たとえば、AVFoundationフレームワークをリンクする場合:

add_executable(myprogram)

find_library(SOME_VAR
    NAMES AVFoundation
    PATHS ${CMAKE_OSX_SYSROOT}/System/Library
    PATH_SUFFIXES Frameworks
    NO_DEFAULT_PATH)

その後

target_link_libraries(myprogram "${SOME_VAR}/AVFoundation")

それが誰かを助けることを願っています。

于 2012-09-24T16:54:14.227 に答える
2

これは私のために働いています:

IF (APPLE)
   find_library(COREMIDI_LIBRARY CoreMIDI)
   find_library(COREFOUNDATION_LIBRARY CoreFoundation)
   target_link_libraries(myprogram ${COREFOUNDATION_LIBRARY} ${COREMIDI_LIBRARY})
ENDIF (APPLE)
于 2014-04-21T17:21:29.473 に答える