Как правильно конвертировать этот Makefile в CMakeLists.txt? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь написать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...