带有 SDL 的 CMake 导致错误

Posted

技术标签:

【中文标题】带有 SDL 的 CMake 导致错误【英文标题】:CMake with SDL causing errors 【发布时间】:2012-05-23 23:36:49 【问题描述】:

我一直在尝试将 CMake 与我在 SDL 中做的项目一起使用,但遇到了一些问题。我用于库等的 sdl 文件夹位于 C:\SDL\SDL-1.2.14。错误状态:

Could NOT find SDL (missing:  SDL_LIBRARY SDL_INCLUDE_DIR)  Could NOT find SDLIMAGE (missing:  SDLIMAGE_LIBRARY SDLIMAGE_INCLUDE_DIR)  CMake Error at C:/Program Files (x86)/CMake
2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE):   Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR) Call Stack (most recent call first):   C:/Program Files (x86)/CMake
2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE)   C:/Program Files (x86)/CMake
2.8/share/cmake-2.8/Modules/FindSDL.cmake:172 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)   CMakeLists.txt:10 (Find_Package)

这是我的 CMakeLists.txt 文件。

Project(SDLExample)
Include(FindSDL)
Include(FindSDL_image)

set(
    SOURCES 
    example.cpp
)

Find_Package(SDL REQUIRED)
Find_Package(SDL_image REQUIRED)

if(NOT SDL_FOUND)
    message( FATAL ERROR "SDL not found!")
endif(NOT SDL_FOUND)

link_libraries(
    $SDL_LIBRARY
    $SDLIMAGE_LIBRARY
    SDLmain
)

add_executable(
    Example
    WIN32
    MACOSX_BUNDLE
    $SOURCES
)

有什么想法吗?

编辑:我现在通过在 Windows GUI 中编辑 SDL 路径的字段来让它工作。问题当然是我找不到将它“反向移植”回 cmake 文件的方法,所以我每次都必须重新编辑它们,生成的 VS10 文件加载到 Visual Studio 中,但没有包含SDL 的路径等已正确加载到项目中,因此它不会编译说它不知道 SDL.h 在哪里。

【问题讨论】:

检查您运行 CMake 的构建目录中的 CMakeCache.txt 文件。可能有一个指定<VAR>:PATH=<Path to SDL includes> 的条目和一个用于 SDL_image 的条目。您需要在 include_directories 命令中添加这两个变量。 找不到,但我确实使用 include_directories 添加了相对路径并且它有效,所以感谢您的帮助!。现在在 windows 上唯一的问题是,我可以编译程序,但是 exe 要求我将 SDL dll 与它本身放在同一目录中才能执行。有什么办法可以让 SDL 包含在 exe 本身中,或者让 cmake 将它们复制到正确的目录中? 也许this answer 能帮上忙? 【参考方案1】:

您不需要包含Find<Lib> 文件。 find_package( <Lib> ) 自动查找并使用这些文件。

如果您使用的是 Windows,我认为您需要将 SDLDIR 环境变量设置为 SDL /lib/include 文件夹所在的文件夹。

【讨论】:

以上是关于带有 SDL 的 CMake 导致错误的主要内容,如果未能解决你的问题,请参考以下文章

带有“#”的 Clang 诊断标志会导致构建错误

CMake 找不到 SDL2

带有 SDL 和 GLEW 的 OpenGL,错误:48

在带有openGL和SDL的Linux上使用c ++时出现SIGSEGV错误

CMake 无法找到 SDL2_ttf,我正在尝试以与 SDL2 相同的方式链接它,并且两者都正确安装在 Ubuntu 18.04 上

尝试使用 CMake 添加库会导致错误