gpt4 book ai didi

iphone - 如何设置 CMake 来构建适用于 iPhone 的应用程序

转载 作者:行者123 更新时间:2023-12-03 18:17:16 26 4
gpt4 key购买 nike

这和我的previous question密切相关,这是关于使用 CMake 在 iPhone 上构建静态库的内容。我可以设置CMAKE_OSX_SYSROOT

但是,这不适用于构建应用程序。我的 CMakeLists.txt 如下所示:

project(TEST)

set(CMAKE_OSX_SYSROOT iphoneos2.2.1)
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)")
set(CMAKE_EXE_LINKER_FLAGS
"-framework Foundation -framework OpenGLES -framework AudioToolbox -framework CoreGraphics -framework QuartzCore -framework UIKit -framework OpenAL"
)

set(SRC --my files--)

add_executable(iphone-test MACOSX_BUNDLE ${SRC})

一些注意事项:

  • 我明确给出了 -framework 链接选项,因为 find_library 并不适用于所有框架(它找到了大多数框架,但没有找到 OpenGLES)。我不明白为什么,因为它们都在同一个文件夹 ${SDK}/System/Library/Frameworks 中。这让我相信我做错了什么,但我不知道是什么。
  • 我将 MACOSX_BUNDLE 添加到 add_executable 命令中,以便生成的产品类型为 com.apple.product-type.application 而不是com.apple.product-type.tool,显然 iPhone 上不存在。

无论如何,应用程序都会正确编译和链接,但是当我在模拟器中运行它时,我会遇到可怕的

Failed to launch simulated application: Unknown error.

谷歌和 stackoverflow 上有很多关于此问题的报告实例,但所有解决方案都涉及清理或创建新项目以及移动文件;但我在 CMake 完成工作后编译了一个新副本,所以这些都不适用。

我找到了this thread在 CMake 邮件列表中,但它只报告构建库成功,然后逐渐消失。

最佳答案

我终于知道该怎么做了。我的 CMakeLists.txt 文件如下所示:

project(test)
set(NAME test)

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

set(CMAKE_OSX_SYSROOT iphoneos2.2.1)
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"
)
link_directories(\${HOME}/\${SDKROOT}/lib)

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

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

target_link_libraries(${NAME}
# other libraries to link
)

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

显然,将 mycompany 更改为您的公司名称,并将 My Name 更改为您的姓名。我发现如上所述添加链接目录 \${HOME}/\${SDKROOT}/lib 非常有用,这样如果您的应用程序链接到静态库(尤其是通用(非iPhone) 库),您可以构建单独的 iPhoneOS 和 iPhoneSimulator 库并轻松链接到正确的库,而不必担心通用二进制文件。

此外,当您使用 CMake 构建项目时,Xcode 似乎无法正确添加资源,因此我将这段代码添加到了 CMakeLists.txt 文件中。它将整个文件夹 /data 复制到我的资源文件夹中(就像我在 Xcode 中添加了“蓝色”文件夹链接一样)。

# copy resource phase

set(APP_NAME \${TARGET_BUILD_DIR}/\${FULL_PRODUCT_NAME})
set(RES_DIR ${test_SOURCE_DIR}/data)
add_custom_command(
TARGET ${NAME}
POST_BUILD
COMMAND /Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp -exclude .DS_Store -exclude CVS -exclude .svn -resolve-src-symlinks ${RES_DIR} ${APP_NAME}
)

关于iphone - 如何设置 CMake 来构建适用于 iPhone 的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/822404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com