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

6

Я пытаюсь создать подпроект с помощью cmake (этоnot проект xcode или даже приложение для iphone, результатом является кросс-платформенный консольный исполняемый файл, который включает в себя некоторые унаследованные от абстрактных классов 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)

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

Он фактически находит все эти фреймворки, но не может ссылаться, что приводит к множеству ошибок компоновщика. Я почти уверен, что это причина, потому что я сделал 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

Это печально, что никто не ответил :( Работал над этим и получил вещь: вы должны связатьNOT 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. Предложения?
В моем случае ни OTHER_LDFLAGS не установлены (или, кажется, они установлены на пустые значения, так как метка на панели настроек Xcode Build выделена жирным шрифтом).

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