Вопрос по ios, linker, frameworks, cmake – Не могу связать платформы MacOS с CMake

6

я пытаюсь построить подпроект с помощью cmake (этоне проект xcode или даже приложение для iphone, результатом является кросс-платформенный консольный исполняемый файл, который включает в себя некоторые унаследованные от абстрактных классов C ++, написанные на target-c ++) I '

Используя это руководство, мы создадим ссылки на платформы 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)

Это важная часть в 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.

Он на самом деле находит все эти рамки, но можетt link, которая выдает много ошибок компоновщика. Я'Я уверен, что этоПричина в том, что я сделал testproj, используя XCode, и в нем были те же ошибки, пока я не связал все необходимые фреймворки.

Когда я просто использую

FIND_LIBRARY(COREMEDIA_LIB CoreMedia)
...

затемCOREMEDIA_LIB установлен вNOTFOUND - какие'происходит? : /

Я много гуглил, но ничего :( Чувствовал себя в значительной степени потерянным там.

Ну, получилось работать сset(CMAKE_EXE_LINKER_FLAGS "-framework fm1-framework fm2..."  Почему неттstackoverflow.com/questions/822404/... способ работы? (ответ с этим макросом ям на самом деле пытался использовать) dreamzor

Ваш Ответ

1   ответ
16

Тот'Жаль, что никто не ответил :( Работал над этим и получил вещь: вы должны связатьНЕ 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)

Надеюсь, это будет полезно для кого-то ...

Это, кажется, добавить рамки в "Другие флаги линкера " AKA OTHER_LDFLAGS, но это не такничего не добавить в шапкуПути поиска по заголовкам » AKA HEADER_SEARCH_PATHS, чтобы мой код могнайти UIKit / UIKit.h. Предложения? Emmanuel
В моем случае ни OTHER_LDFLAGS не установлены (или, кажется, они установлены на пустые значения, так как метка на панели настроек Xcode Build выделена жирным шрифтом). lef

Похожие вопросы