Я пытаюсь написать CMakeLists.txt
для моего плагина-локализатора Unity3D NativeAudioSDK (написанного на C ++).Почти идентичную конфигурацию сборки можно найти здесь .Эквивалент 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?На данный момент любая помощь очень ценится.
Я звоню CMake в build.sh
скрипт, как это:
cmake -DCMAKE_CXX_FLAGS="-m64 -fPIC" -DCMAKE_C_FLAGS="-m64 -fPIC"
Версиисоответствующего программного обеспечения:
- Ubuntu 18.04.1 LTS / Linux 4.15.0-29-generic
- cmake 3.14.0
- g ++ 7.3.0
- Unity 2018.2.1f1 Personal (64bit)
Моя файловая структура выглядит следующим образом:
.
│ 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
.