我正在尝试为我的Unity3D NativeAudioSDK空间化插件(用C ++编写)编写一个CMakeLists.txt
。 here可以找到几乎相同的构建配置。我项目中的等效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"
涉及的软件版本:
我的文件结构如下:
.
│ 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
。