相关疑难解决方法(0)

如何设置CMake为iPhone构建一个库

我正在尝试使用CMake通过手动设置某些属性来为iPhone生成Xcode配置.(这甚至是正确的方法吗?)我的CMake文件看起来像:

project(MYLIB)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_CONFIGURATION_TYPES Debug Release Debug-iPhone)
set(FILES list of my files...)

add_library(mylib FILES)

set(XCODE_ATTRIBUTE_SDKROOT iphoneos2.2.1)
# more attributes later, I'm just trying to get one to work first
Run Code Online (Sandbox Code Playgroud)

首先,这似乎不起作用 - 在生成的Xcode项目(我正在运行cmake . -G Xcode)中,SDKROOT仍然没有设置,所以它说"当前Mac OS".

其次,假设这是执行此操作的正确方法,如何仅为配置设置属性Debug-iPhone

iphone xcode cmake

9
推荐指数
1
解决办法
1万
查看次数

自动创建Xcode项目(.xcodeproj)

如何在终端中自动创建XCode项目?如果您要问这个目的......我希望创建一个可以为不同用户自动创建多个不同项目的服务.


ApplesScript

我相信AppleScript可以实现这一点,但这会耗尽资源,因为它会打开XCode.此外,这很可能需要花费大量时间来创建多个项目.

*编辑:AppleScript的使用绝对不是我在高性能解决方案方面所寻找的.


CMake的

我已经看过CMake,但是我有点迷失并且对它给出的文档感到困惑......

*编辑:我在https://gist.github.com/740257上找到了CMakeLists.txt的以下内容.但是,必须修改设置.

# See original post at http://stackoverflow.com/questions/822404/how-to-set-up-cmake-to-build-an-app-for-the-iphone

cmake_minimum_required(VERSION 2.8)

cmake_policy(SET CMP0015 NEW)
cmake_policy(SET CMP0016 NEW)

project(test)
set(NAME test)

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

SET (SDKVER "4.1")
SET (DEVROOT "/Developer/Platforms/iPhoneOS.platform/Developer")
SET (SDKROOT "${DEVROOT}/SDKs/iPhoneOS${SDKVER}.sdk")
SET (CMAKE_OSX_SYSROOT "${SDKROOT}")
SET (CMAKE_OSX_ARCHITECTURES "$(ARCHS_UNIVERSAL_IPHONE_OS)")

#Other 'CMAKE_OSX_ARCHITECTURES' iPhone/IOS option examples
#SET (CMAKE_OSX_ARCHITECTURES "armv6" "armv7")
#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} …
Run Code Online (Sandbox Code Playgroud)

macos xcode automation cmake ios

8
推荐指数
1
解决办法
3858
查看次数

为多个移动平台构建工具

我们有一个针对多个移动平台的复杂C++代码库.我们目前有Windows CE(原始CE和移动版本为4.2到6.5),Android(2.1 +),iPhone(4 +),几乎可以使用Bada(2.0+),如果有新的C++/CX,可能会添加Windows Phone(8+).加上Win32上的测试版和Win64 上的服务应用程序共享一些代码.我们也已经尝试在Linux上编译单元测试,并且已经出现了问题(到目前为止业务量太小,但可能会有所改变),以使其在其他Linux平台上运行.

我们目前使用每个平台的本机工具编译代码.它们中的每一个都非常复杂,并且在其中或周围有一些黑客可以实现合理的单击构建.而对于Bada来说,我们还没有解决三星调整过的Eclipse之外的版本,我们必须为生产做些什么.

到目前为止它的工作原理,但正在变得越来越多的维护问题.目前最大的问题是iPhone构建,因为与Visual Studio项目文件和普通makefile不同,它不可能手动添加/删除/重命名XCode项目中的文件,只有两个人拥有MacOS boxen和任何XCode的经验(虽然每个人都有Windows并且知道Visual Studio).我们还需要为Bada目标创建一些makefile(它是普通的GNU工具链,所以任何能够与那些交叉编译的东西都应该这样做)并且我不会在中期摆脱Android构建中的一些kludges:修复bug在cygwin下构建时的依赖性处理,在ant构建脚本和shell胶水之上的一些hacks按摩清单并将它们保持在一起.

因此,我正在寻找有关如何统一这组不同平台的构建过程的建议.

  • 它绝对必须处理构建iPhone和Bada可执行文件以及Android构建的本机部分(因为没有人有所有三个平台分别进行测试).
  • 必须处理由几个共享库组成的大型项目,一个主二进制文件,一个用于相同平台的测试二进制文件和一些仅在某些平台上构建的辅助二进制文件(当前仅限Win32).
  • 必须能够使用版本控制系统的版本和一些用户自定义变量生成构建配置头和Java文件,因为我们做了18并为不同的客户计算略有不同的构建.
  • 当然,它必须自动处理依赖项(头文件)并且通常是可靠的.

对于其他我准备解决任何缺陷的事情,但我显然希望保持壳管胶带和吐出的量最小,所以它应该:

  • 能够与Visual Studio,Eclipse和XCode集成足以使每个环境都能触发构建,将构建产品上传到相应的目标并在那里附加调试器.
  • 能够构建Java并为Android调用自定义打包工具,因此我们不必破解Google在过去两年中无偿且不兼容地更改两次的ant构建脚本(并且无法下载旧SDK).
  • 能够安装各种数据文件并调用随机打包器和随机的其他脚本和工具和东西,因此它不必与太多的shell脚本混合使用.

到目前为止,我们已经开始尝试CMake(没有太多时间,因此没有达到目标,但很快就要做一些事情)并且还考虑了SCons.但是几年前我已经尝试使用SCons for Windows CE构建,但是因为它为Visual Studio生成了makefile类型的项目,而那些在VS2005中不适用于嵌入式平台,所以我放弃了.CMake可以生成本机makefile,但CE需要一个定制的,过时的分支.所以我想问一下我们可能想要查看的其他工具,或者我们应该注意这些工具的任何已知绊脚石.

更新:我在几个地方找到了android原生二进制文件的说明,pixellight甚至有cmake脚本通过直接调用打包工具生成apk.另外这个shell脚本显示它. 这里似乎记录了iPhone的使用情况.

c++ build-automation build multiplatform

8
推荐指数
1
解决办法
1788
查看次数

无法将MacOS框架与CMake链接

我正在尝试使用cmake构建一个子项目(它不是一个xcode项目,甚至不是iphone的应用程序,结果是跨平台的控制台可执行文件,其中#includes一些继承自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)
Run Code Online (Sandbox Code Playgroud)

这是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)
........
Run Code Online (Sandbox Code Playgroud)

这就是我在尝试构建时所拥有的:

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 …
Run Code Online (Sandbox Code Playgroud)

linker frameworks cmake ios

6
推荐指数
1
解决办法
4715
查看次数