无法将sdl_mixer与cmake链接

时间:2018-11-28 17:22:55

标签: cmake sdl sdl-mixer

当我调用Mix_OpenAudio(...)时,我特别得到了一个未定义的引用。我可以包括“ SDL_mixer.h”。 这是我的CMakeList.txt。对不起,其中包括所有其他软件包。我还将包括FindSDL_MIXER.cmake。 我也可以创建SDL_Mixer数据类型。我使用apt-get install安装了SDL_Mixer。

PROJECT(Window)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)


SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/CMakeModules")
add_definitions( -DMAGICKCORE_QUANTUM_DEPTH=16 )
add_definitions( -DMAGICKCORE_HDRI_ENABLE=0 )

FIND_PACKAGE(OpenGL REQUIRED)
FIND_PACKAGE(SDL2 REQUIRED)
FIND_PACKAGE(GLEW REQUIRED)
FIND_PACKAGE(GLM REQUIRED)
FIND_PACKAGE(Bullet REQUIRED)
FIND_PACKAGE(ASSIMP REQUIRED)
FIND_PACKAGE(ImageMagick COMPONENTS Magick++ REQUIRED )
FIND_PACKAGE(SDL_MIXER)
SET(CXX11_FLAGS "-std=gnu++11 -lassimp")
SET(CDEBUG_FLAGS -g)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAGS} ${CDEBUG_FLAGS}")
SET(TARGET_LIBRARIES "${OPENGL_LIBRARY} ${SDL2_LIBRARY} ${ASSIMP_LIBRARIES}")

# Find where Magick++-config lives

IF(UNIX)
  ADD_DEFINITIONS(-DUNIX)
ENDIF(UNIX)

IF(NOT APPLE)
  IF(GLEW_FOUND)
      INCLUDE_DIRECTORIES(${GLEW_INCLUDE_DIRS})
      LINK_LIBRARIES(${GLEW_LIBRARIES})
  ENDIF(GLEW_FOUND)
  IF(ASSIMP_FOUND)
      INCLUDE_DIRECTORIES(${ASSIMP_INCLUDE_DIRS})
      LINK_LIBRARIES(${ASSIMP_LIBRARIES})
  ENDIF(ASSIMP_FOUND)
ENDIF(NOT APPLE)


INCLUDE_DIRECTORIES(
  "${PROJECT_SOURCE_DIR}/include"
  ${SDL2_INCLUDE_DIR}
  ${GLM_INCLUDE_DIRS}
  ${ASSIMP_INCLUDE_DIRS}
  ${ImageMagick_INCLUDE_DIRS}
  ${BULLET_INCLUDE_DIRS}
)

# Copy shaders, models, and default config
# FILE(COPY src/shaders DESTINATION .)
# FILE(COPY models DESTINATION .)
# FILE(COPY textures DESTINATION .)
# FILE(COPY config.json DESTINATION .)


# Set Includes
SET(INCLUDES ${PROJECT_SOURCE_DIR}/include)
INCLUDE_DIRECTORIES(${INCLUDES} ${ASSIMP_INCLUDE_DIRS} ${ImageMagick_INCLUDE_DIRS} ${BULLET_INCLUDE_DIRS})

# Set sources
FILE(GLOB_RECURSE SOURCES "src/*.cpp")
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES})

add_custom_target("${PROJECT_NAME}_SUCCESSFUL" ALL
                  DEPENDS ${PROJECT_NAME}
                  COMMAND ${CMAKE_COMMAND} -E echo ""
                  COMMAND ${CMAKE_COMMAND} -E echo "====================="
                  COMMAND ${CMAKE_COMMAND} -E echo "  Compile complete!"
                  COMMAND ${CMAKE_COMMAND} -E echo "====================="
                  COMMAND ${CMAKE_COMMAND} -E echo "${CMAKE_CURRENT_BINARY_DIR}"
                 )

TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OPENGL_LIBRARY} ${SDL2_LIBRARY} ${ASSIMP_LIBRARY} ${ImageMagick_LIBRARIES} ${BULLET_LIBRARIES} ${SDL_MIXER_LIBRARY})

现在是FindSDL_MIXER.cmake。

#
# Find SDL_MIXER
#

# Additional modules
include(FindPackageHandleStandardArgs)

# Find include files
find_path(
  SDL_MIXER_INCLUDE_DIR
  PATHS
  /usr/include
  /usr/local/include
  /sw/include
  /opt/local/include
  ${SDL_MIXER_ROOT_DIR}/include
  DOC "The directory where SDL_mixer.h resides")

# Handle REQUIRD argument, define *_FOUND variable
#find_package_handle_standard_args(SDL_MIXER_INCLUDE_DIR)

# Hide some variables
mark_as_advanced(SDL_MIXER_INCLUDE_DIR)

1 个答案:

答案 0 :(得分:2)

这是因为FindSDL_MIXER.cmake没有设置库变量。 cmake 3.13具有更新的FindSDL_mixer.cmake,可以正确设置此设置,您可以将其用作示例。具体来说,在FindSDL_MIXER.cmake中需要这样的一行来查找库并设置变量。

find_library(SDL_MIXER_LIBRARY
  NAMES SDL2_mixer
  HINTS
    ENV SDLMIXERDIR
    ENV SDLDIR
  PATH_SUFFIXES lib
)

我还注意到,SDL_MIXER_INCLUDE_DIR似乎未在目标的CMakeLists.txt中使用。碰巧它可能与所包含的其他其他头文件位于同一位置。

您可能还想将文件重命名为FindSDL2_MIXER.cmake并更改相应的FIND_PACKAGE(SDL2_MIXER)。我不确定是否正在使用发布的FindSDL_MIXER.cmake,因为看起来find_path在语法上不正确,它缺少要查找的文件名。