CMake和XCode:“不能找到'NSObject'的接口声明” [英] CMake and XCode: "cannot find interface declaration for 'NSObject'"
问题描述
我想用CMake生成一个XCode项目,但是遇到了一些问题。
I am trying to generate an XCode project with CMake, but I ran into some problems.
CMake生成项目很好,但后来很明显链接到Foundation和UIKit框架。我对CMake很新鲜,一直试图克服这个,但没有成功。
CMake generates the project fine, but afterwards it becomes apparent that it hasn't linked to the Foundation and UIKit frameworks. I am pretty new to CMake and have been trying to overcome this, but with no success.
CMake输出(部分):
The CMake output (partial):
...
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
文件(由多个答案组合在一起):
Below is my CMakeLists.txt
file (put together from several answers on 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")
推荐答案
我有几个建议:
- 不要使用
add_framework
。这使得CMake设置项目属性FRAMEWORK_SEARCH_PATHS
,它以某种方式拧紧了一切。取而代之使用CMAKE_OSX_SYSROOT
的命令行开关-framework
- 使用iphoneos
- 您不需要
CMAKE_CXX_FLAGS
- don't use
add_framework
. This makes CMake set the project propertyFRAMEWORK_SEARCH_PATHS
which somehow screws up everything. Instead use the command line switch-framework
- for
CMAKE_OSX_SYSROOT
you can just use iphoneos - you don't need the
CMAKE_CXX_FLAGS
有了这些,你可能有更多的运气。到目前为止,我设法超过了大部分的链接错误。
With these you might have more luck. I managed to get past most of the link errors so far.
这篇关于CMake和XCode:“不能找到'NSObject'的接口声明”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!