【发布时间】:2018-02-16 00:30:24
【问题描述】:
我知道以前有人问过这个问题,但我对我在网上找到的答案不满意,所以希望有人可以为我提供正确的见解。
我正在尝试在 Windows 上使用 CLion 配置 SDL2,但遇到了一些问题。我之前在 linux 上下载了 SDL2 源,成功构建并安装了它们,所以我知道它可以工作。但是,我现在无法访问那台计算机,我正在尝试在 Windows 上进行设置。
我下载了http://libsdl.org/release/SDL2-devel-2.0.7-mingw.tar.gz 并将其内容提取到E:\SDL2\SDL2-2.0.7(E:\SDL2\SDL2-2.0.7\x86_64-w64-mingw32\bin 包含SDL2.dll)。我发现的任何指南都没有说明运行 configure、cmake、make 或其他任何内容,并且由于它包含一个 DLL,我假设一切都是预先构建的 (?)
这是我在E:\repository\SDL_Project 中的 CLion 项目中的 CMakeList.txt(名为 SDL_Project):
cmake_minimum_required(VERSION 3.6)
project(SDL_Project)
set(CMAKE_CXX_STANDARD 14)
add_executable(SDL_Project src/main.cpp)
find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)
find_package(SDL2_ttf REQUIRED)
include_directories(${SDL2_INCLUDE_DIR}
${SDL2_IMAGE_INCLUDE_DIR}
${SDL2_TTF_INCLUDE_DIR})
target_link_libraries(SDL_Project ${SDL2_LIBRARY}
${SDL2_IMAGE_LIBRARIES}
${SDL2_TTF_LIBRARIES})
仅此一项不起作用,因为 CMake 不知道在哪里寻找 SDL2(这与我的 Linux 经验不同。)
我在网上找到了几个版本的FindSDL2.cmake,显然这些是在不同位置搜索 SDL2 的巨大脚本。
在CMakeList.txt 旁边添加此脚本对我不起作用:
CMake Error at CMakeLists.txt:8 (find_package):
By not providing "FindSDL2.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "SDL2", but
CMake did not find one.
[...]
我还通过控制面板在Windows系统环境变量中将SDL2目录添加到PATH。
这是我的编译器消息(当我注释掉 CMakeList.txt 中导致错误的 SDL2 行时):
E:\repository\SDL_Project\src\main.cpp:1:17: fatal error: SDL.h: No such file or directory
#include <SDL.h>
^
compilation terminated.
我知道这个错误很明显,但为了完整起见,我还是把它包括在这里。
我有以下问题:
- 如何以干净的方式为 Windows 正确设置它(将 SDL2 添加到 System32 对我来说似乎不太好..)
- 我想使用完全相同的 CMakeList.txt 文件从多台机器(linux、Windows..)构建,因此理想情况下,它不包含硬编码路径或特定于操作系统的代码或配置。
- 使用包含大量硬编码位置列表的大型
FindSDL2.cmake文件进行搜索,这对我来说似乎也不太好.. - 理想情况下,设置构建环境所需的配置最少; a) 克隆存储库,b) 下载/解压缩 SDL2,c) 以某种方式告诉编译器 SDL2 的位置。
换句话说;什么是这个问题的一个好的、便携的、最小的解决方案?请尽可能激发答案,我想了解为什么这是一个很好的解决方案以及如何做到这一点。谢谢!!
【问题讨论】:
-
Adding this script next to CMakeList.txt does not work for me:- 仔细阅读错误信息:CMake希望在CMAKE_MODULE_PATH中列出的目录下找到一个脚本,因此您需要调整此变量以使用该脚本:list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")。至于提示脚本在您的系统上的 SDL2 位置,请检查脚本的描述(在文件FindSDL2.cmake的开头)。或set CMAKE_PREFIX_PATH variable,在大多数情况下都有效。 -
SDL2 支持 CMake (github.com/davidsiaw/SDL2),所以让我们将 SDL2 集成为 CMake 子项目 cf crascit.com/2015/07/25/cmake-gtest
-
@MizuxDev 我无法让它工作..如果你有时间,你可以发布 CMake 文件作为答案吗?如果没有,哦,好吧,我设法使用下面的答案让它工作。谢谢!