CMake и XCode: «не удается найти объявление интерфейса для« NSObject »» - PullRequest
2 голосов
/ 29 марта 2011

Я пытаюсь сгенерировать проект XCode с помощью CMake, но столкнулся с некоторыми проблемами.

CMake генерирует проект нормально, но впоследствии становится очевидно, что он не связан с платформами Foundation и UIKit.,Я довольно новичок в CMake и пытался преодолеть это, но безуспешно.

Вывод CMake (частичный):

...
Framework Foundation found at /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/System/Library/Frameworks/Foundation.framework
Framework CoreGraphics found at /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/System/Library/Frameworks/CoreGraphics.framework
Framework UIKit found at /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/System/Library/Frameworks/UIKit.framework
Configuring done
Generating done

Ниже приведен мой файл CMakeLists.txt (составленный из нескольких ответов по SO):

cmake_minimum_required(VERSION 2.8)

macro(ADD_FRAMEWORK fwname appname libpath)
    find_library(FRAMEWORK_${fwname}
        NAMES ${fwname}
        PATHS ${libpath}

        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)

project(test)
set(NAME test)
set (libpath /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/System/Library)


file(GLOB headers *.h)
file(GLOB sources *.m)

set(CMAKE_OSX_SYSROOT iphoneos4.2)
set(CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
set(CMAKE_CXX_FLAGS "-x objective-c++")
set(CMAKE_EXE_LINKER_FLAGS
    "-framework AudioToolbox -framework CoreGraphics -framework QuartzCore -framework UIKit -framework Foundation"
)

set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.mycompany.\${PRODUCT_NAME:identifier}")
set(APP_TYPE MACOSX_BUNDLE)

add_executable(${NAME}
    ${APP_TYPE}
    ${headers}
    ${sources}
)

ADD_FRAMEWORK(Foundation ${NAME} ${libpath})
ADD_FRAMEWORK(CoreGraphics ${NAME} ${libpath})
ADD_FRAMEWORK(UIKit ${NAME} ${libpath})

# code signing
set_target_properties(${NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer: Some Name")

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

У меня есть несколько предложений:

  • не используйте add_framework. Это заставляет CMake установить свойство проекта FRAMEWORK_SEARCH_PATHS, которое каким-то образом испортит все. Вместо этого используйте переключатель командной строки -framework
  • для CMAKE_OSX_SYSROOT вы можете просто использовать iphoneos
  • вам не нужно CMAKE_CXX_FLAGS

С этим вы можете иметь больше удачи. До сих пор мне удалось преодолеть большинство ошибок ссылок.

1 голос
/ 26 апреля 2011

Попробуйте следующее правило в вашем CMakeLists.txt:

link_directories(\${HOME}/\${SDKROOT}/lib)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...