在OSX上使用CMake构建Unity本机包

时间:2015-12-03 20:35:10

标签: c++ xcode macos unity3d cmake

我有一个Xcode项目,它构建一个包含库的包。我使用以下菜单创建了项目:

  

新项目 - >框架&图书馆 - >束

为了提供更多上下文,我想创建一个native plugin for Unity。目前标题非常简单,只包含标题和源文件。

我现在希望能够使用CMake生成类似的项目,我正在努力使其工作。

CMake文件我归结为:

cmake_minimum_required(VERSION 3.3)
project(Plugin)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES Plugin.cpp)
add_library(Plugin SHARED ${SOURCE_FILES})

上面的脚本构建了一个.dylib文件,我希望能够构建一个.bundle文件。

我发现add_executable有一个MACOSX_BUNDLE选项,但它对我不起作用,因为我想捆绑一个库。还有一个名为BUNDLE的目标属性,但它似乎没有改变我的项目 - 当我希望得到一个.bundle文件时,它仍会创建一个.dylib文件。

我看了this question似乎提出了一个有效的解决方案,但我不能让它适用于我的项目。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:8)

使用CMake:

add_library(Plugin MODULE ${SRCS})
set_target_properties(Plugin PROPERTIES BUNDLE TRUE)

将使用Plugin.bundle

创建Contents/MacOS/Plugin文件夹

BUNDLE属性描述为here

另外,根据Unity3D论坛上的this post,只需将.dylib重命名为.bundle也可以。

在CMake中,这将是:

set_target_properties(Plugin PROPERTIES SUFFIX ".bundle")

答案 1 :(得分:0)

我没有使用CMake,但我已经为iOS和OSX构建了一个Unity本机库。我通过调用data := make([]byte, 4) buf := &s.WSABuf{ Len: uint32(len(data)), Buf: &data[0], } var sent *uint32 overlapped := s.Overlapped{} croutine := byte(0) err = s.WSASendto(sd, buf, 1, sent, uint32(0), &sa, &overlapped, &croutine) check(err) 使用构建脚本为两个平台构建。它为iOS构建了一个静态库,为OSX构建了一个动态库,在将构建的库复制到位时,xcodebuild只是重命名为.dylib

这是我的构建脚本,如果有帮助:

.bundle

Xcode项目包含每个平台的目标,其中 Scheme 用于定义要构建的目标。