FindSDL_sound

查找 SDL_sound 库,这是一个用于 SDL (Simple DirectMedia Layer) 应用程序的抽象声文件解码器。

注意

此模块专门用于 SDL_sound 版本 1。从版本 2.0.2 开始,SDL_sound 在使用 CMake 构建时会提供一个 CMake 包配置文件,并且应该使用 find_package(SDL2_sound) 进行查找。这些较新版本提供了 导入的目标 来封装使用需求。有关更多信息,请参阅上游 SDL_sound 文档。

注意

此模块依赖于找到 SDL,并且必须在 find_package(SDL) 之后调用。

根据 SDL_sound 库的构建方式,它可能需要其他依赖库才能使此模块成功。这些依赖项可能包括 MikMod、ModPlug、Ogg、Vorbis、SMPEG、FLAC 和 Speex。

结果变量

此模块定义了以下变量

SDL_SOUND_FOUND

一个布尔值,指示是否找到(请求版本)的 SDL_sound 库。为向后兼容,SDL_SOUND_FOUND 变量也设置为相同的值。

SDL_SOUND_VERSION_STRING

包含找到的 SDL_sound 版本的可读字符串。

SDL_SOUND_LIBRARIES

链接 SDL_sound 库所需的库。

缓存变量

以下缓存变量也可以设置

SDL_SOUND_INCLUDE_DIR

包含 SDL_sound.h 和使用 SDL_sound 库所需的其他头文件的目录。

SDL_SOUND_LIBRARY

仅链接 SDL_sound 库的名称。请使用 SDL_SOUND_LIBRARIES 进行链接说明,而不是这个。

MIKMOD_LIBRARY

依赖的 MikMod 库的路径。

MODPLUG_LIBRARY

依赖的 ModPlug 库(libmodplug)的路径。

OGG_LIBRARY

依赖的 Ogg 库的路径。

VORBIS_LIBRARY

依赖的 Vorbis 库的路径。

SMPEG_LIBRARY

依赖的 SMPEG 库的路径。

FLAC_LIBRARY

依赖的 FLAC 库的路径。

SPEEX_LIBRARY

依赖的 Speex 库的路径。

提示

此模块接受以下变量

SDLDIR

可设置的环境变量,用于帮助定位安装在自定义位置的 SDL 库。它应该指向配置、构建和安装 SDL 库时使用的安装目标:./configure --prefix=$SDLDIR

在 macOS 上,设置此变量会优先选择 Framework 版本(如果找到)而不是其他版本。在这种情况下,需要手动更改 SDL_LIBRARY 的缓存值来覆盖此选择,或者设置 CMAKE_INCLUDE_PATH 变量来修改搜索路径。

SDLSOUNDDIR

SDLDIR 功能相同的环境变量。

SDL_SOUND_EXTRAS

这是一个可选的缓存变量,可用于添加附加标志,这些标志会添加到 SDL_SOUND_LIBRARIES 结果变量的前面。这主要用于该模块未能预料到的情况,需要添加附加标志。

示例

查找 SDL_sound 库并为链接到项目目标创建导入的接口目标

find_package(SDL)
find_package(SDL_sound)

if(SDL_sound_FOUND AND NOT TARGET SDL::SDL_sound)
  add_library(SDL::SDL_sound INTERFACE IMPORTED)
  set_target_properties(
    SDL::SDL_sound
    PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${SDL_SOUND_INCLUDE_DIR}"
      INTERFACE_LINK_LIBRARIES "${SDL_SOUND_LIBRARIES}"
  )

  # Append the SDL dependency as imported target to be transitively linked:
  set_property(
    TARGET SDL::SDL_sound
    APPEND
    PROPERTY INTERFACE_LINK_LIBRARIES SDL::SDL
  )
endif()

target_link_libraries(project_target PRIVATE SDL::SDL_sound)

在使用 SDL_sound 版本 2 时,上游包直接提供了 SDL2_sound::SDL2_sound 导入目标。它可以在项目中使用,而无需使用此模块。

find_package(SDL2_sound)
target_link_libraries(project_target PRIVATE SDL2_sound::SDL2_sound)

另请参阅

  • 用于查找主 SDL 库的 FindSDL 模块。