如何正确地将此Makefile转换为CMakeLists.txt?

时间:2019-03-26 22:38:06

标签: unity3d makefile cmake unity3d-native-plugins

我正在尝试为我的Unity3D NativeAudioSDK空间化插件(用C ++编写)编写一个CMakeLists.txthere可以找到几乎相同的构建配置。我项目中的等效Makefile如下所示:

SRCS=AudioPluginUtil.cpp \
Plugin_Spatializer.cpp \
hrtftable.cpp
OBJS=$(SRCS:.cpp=*.o)
OUTPUT=libAudioPluginDemo.so
CXXFLAGS=-I. -O2 -fPIC
LDFLAGS=-shared -rdynamic -fPIC
CXX=g++

all: $(OUTPUT)
clean:
    rm -f $(OUTPUT) $(OBJS)

$(OUTPUT): $(OBJS)
    $(CXX) $(LDFLAGS) -o $(OUTPUT) $(OBJS)

.cpp.o:
    $(CXX) $(CXXFLAGS) -c $<

我想使用CMake进行跨平台开发和生成文件。我目前的CMakeLists.txt适用于Windows开发,如下所示:

cmake_minimum_required(VERSION 3.13)
project(DomeSpatializer)

if(WIN32)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
endif(WIN32)

file(GLOB DEPENDENCIES
  "${CMAKE_CURRENT_SOURCE_DIR}/externals/nativeaudioplugins/NativeCode/AudiopluginInterface.h"
  "${CMAKE_CURRENT_SOURCE_DIR}/externals/nativeaudioplugins/NativeCode/AudioPluginUtil.h"
  "${CMAKE_CURRENT_SOURCE_DIR}/externals/nativeaudioplugins/NativeCode/AudioPluginUtil.cpp"
)

add_library(DomeSpatializer SHARED "${CMAKE_CURRENT_SOURCE_DIR}/source/spatializer.cpp" ${DEPENDENCIES})

if(UNIX)
  target_link_options(DomeSpatializer PUBLIC "-rdynamic")
endif(UNIX)

在Linux上,使用Makefile,一切正常。但是,CMakeLists.txt生成一个共享对象文件,Unity无法将其识别为空间插件。我尝试使用-fPIC -shared -rdynamic或诸如target_linker_options()CMAKE_EXE_LINKER_FLAGS之类的各种变量设置链接器标志(CMAKE_SHARED_LINKER_FLAGS),但没有成功。我有什么想念的吗?如何使用CMakeLists.txt实现相同的正确构建配置?非常感谢您的帮助。


我正在像这样的build.sh脚本中调用CMake:

cmake -DCMAKE_CXX_FLAGS="-m64 -fPIC" -DCMAKE_C_FLAGS="-m64 -fPIC"


涉及的软件版本:

  • Ubuntu 18.04.1 LTS / Linux 4.15.0-29-通用
  • cmake 3.14.0
  • g ++ 7.3.0
  • Unity 2018.2.1f1个人版(64位)

我的文件结构如下:

.
│   build.sh
│   CMakeLists.txt
│   
├───externals
│   └───nativeaudioplugins            
│       └───NativeCode
│               AudioPluginInterface.h
│               AudioPluginUtil.cpp
│               AudioPluginUtil.h
│               hrtftable.cpp
│               Makefile
│               PluginList.h
│               Plugin_Spatializer.cpp
│
└───source
        spatializer.cpp

请注意,./source/spatializer.cpp./externals/nativeaudioplugins/NativeCode/Plugins_Spatializer.cpp是相同的,但是我想在spatializer.cpp中使用CMakeLists.txt

0 个答案:

没有答案