Попытка добавить SDL2_mixer и SDL2 как внешний проект в CMake - PullRequest
0 голосов
/ 02 сентября 2018

В настоящее время я пытаюсь получить SDL2 и SDL2_mixer как внешние проекты в моем проекте CMake.

SDL2, кажется, работает нормально, но я не могу заставить SDL2_mixer скомпилироваться. Сбой при попытке связать двоичный файл playwav. Проблема заключается в переменных CFLAGS и LDFLAGS в ExternalProject_Add. Та же проблема возникает при добавлении этих переменных при сборке из командной строки без CMake.

Вот мой код:

cmake_minimum_required(VERSION 2.8)

include(ExternalProject)

project(sdl2_test)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
set(LIBS_DIR ${PROJECT_BINARY_DIR}/libs)
set(SDL2_VER "2.0.8")
set(SDL2_MIXER_VER "2.0.2")

# SDL library
ExternalProject_Add(sdl2_project
    URL http://www.libsdl.org/release/SDL2-${SDL2_VER}.tar.gz
    PREFIX ${LIBS_DIR}/SDL2
    INSTALL_COMMAND ""
)

ExternalProject_Get_Property(sdl2_project SOURCE_DIR)
ExternalProject_Get_Property(sdl2_project BINARY_DIR)

set(SDL2_SRC ${SOURCE_DIR})
set(SDL2_BIN ${BINARY_DIR})

file(GLOB SDL2_INCLUDE "${SDL2_SRC}/include/*")
file(COPY ${SDL2_INCLUDE} DESTINATION ${SDL2_BIN}/include/)

# SDL_mixer library
ExternalProject_Add(sdl2_mixer_project
    URL https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-${SDL2_MIXER_VER}.tar.gz
    DEPENDS sdl2_project
    PREFIX ${LIBS_DIR}/SDL2_mixer
    CONFIGURE_COMMAND
        SDL2_CONFIG=${SDL2_BIN}/sdl2-config
        CFLAGS=-I${SDL2_BIN}/include
        LDFLAGS=-L${SDL2_BIN}
        #LIBS=-ldl
        <SOURCE_DIR>/configure
            --prefix=<INSTALL_DIR>
            --enable-shared=no
            #--with-sdl-prefix=${SDL2_BIN}
            --disable-sdltest
    BUILD_COMMAND make
    INSTALL_COMMAND ""
)

#file(GLOB SDL2_INCLUDE "${SDL2_SRC}/include/*")
#file(COPY ${SDL2_INCLUDE} DESTINATION ${SDL2_BIN}/include/)

ExternalProject_Get_Property(sdl2_mixer_project SOURCE_DIR)
ExternalProject_Get_Property(sdl2_mixer_project BINARY_DIR)

set(SDL2_MIXER_SRC ${SOURCE_DIR})
set(SDL2_MIXER_BIN ${BINARY_DIR})

include_directories(${SDL2_SRC}/include)
include_directories(${SDL2_MIXER_SRC}/include)

set(SOURCE sdl2test.cc)
add_executable(sdl_test ${SOURCE})
add_dependencies(sdl_test sdl2_project sdl2_mixer_project)

target_link_libraries(sdl_test ${SDL2_BIN}/libSDL2.a)

Файл sdl2test.cc это просто фиктивный файл:

#include <iostream>

int main()
{
    std::cout << "Hooray" << std::endl;
    return 0;
}
...