代码之家  ›  专栏  ›  技术社区  ›  Nidhoegger

尝试在CMake中添加SDL2_mixer和SDL2作为ExternalProject

  •  1
  • Nidhoegger  · 技术社区  · 6 年前

    我目前正试图在我的CMake项目中获取SDL2和SDL2_混频器作为外部项目。

    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;
    }
    
    0 回复  |  直到 6 年前