无法让 SDL2 与 MinGW、VSCode 和 Windows 上的 CMake 一起工作 10
Can't get SDL2 to work with MinGW, VSCode and CMake on Windows 10
我想在 Windows 10 上使用 VS Code、mingw 和 Cmake。我做了一个简单的应用程序:
-SDL2
-main.cpp
-CMakeLists.txt
这是我的CMakeLists.txt
的当前内容
cmake_minimum_required(VERSION 3.19.0)
project(main VERSION 1.0.0)
list(APPEND CMAKE_PREFIX_PATH SDL2)
find_package(SDL2 REQUIRED)
add_executable(main main.cpp)
target_link_directories(main PRIVATE ${SDL2_INCLUDE_DIRS})
target_link_libraries(main PRIVATE ${SDL2_LIBRARIES})
我的 SDL2 文件夹中也有一个 SDL2Config.cmake
:
set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include")
# Support both 32 and 64 bit builds
if (${CMAKE_SIZEOF_VOID_P} MATCHES 8)
set(SDL2_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/lib/x64/SDL2.lib;${CMAKE_CURRENT_LIST_DIR}/lib/x64/SDL2main.lib")
else ()
set(SDL2_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/lib/x86/SDL2.lib;${CMAKE_CURRENT_LIST_DIR}/lib/x86/SDL2main.lib")
endif ()
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
构建此结果 'SDL.h' 未找到,这是包含 #include<SDL2.h>
.
我也试过“vcpkg”,它带有 triplets
,x64-windows
三元组允许我找到该文件,但它不会编译,因为它是为 VSCommunity 设计的。我尝试了 mingw x64-mingw-dynamic
和 x64-mingw-static
的其他三元组,但它们都未能构建包。这是我用来安装 SDL2 vcpkg install SDL2:triplet
的命令,其中 triplet
是上述命令之一。
如果您使用 vcpkg
,您需要在某处设置工具链文件。
在 CMakeLists.txt
中或者您可以在命令行参数中设置它:
1。 CMakeLists.txt
:
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake
CACHE STRING "Vcpkg toolchain file")
注意!确保路径正确!
2。作为命令行参数(我个人更喜欢这个更容易移植)
cmake .. -DCMAKE_TOOLCHAIN_FILE=C:<your-path>/vcpkg/scripts/buildsystems/vcpkg.cmake
阅读 vcpkg integration。
manifest mode 是最终的专业提示,因为这会导致干净的 CMakeLists.txt
文件和完全可移植(且无痛)的过程。
我想在 Windows 10 上使用 VS Code、mingw 和 Cmake。我做了一个简单的应用程序:
-SDL2
-main.cpp
-CMakeLists.txt
这是我的CMakeLists.txt
cmake_minimum_required(VERSION 3.19.0)
project(main VERSION 1.0.0)
list(APPEND CMAKE_PREFIX_PATH SDL2)
find_package(SDL2 REQUIRED)
add_executable(main main.cpp)
target_link_directories(main PRIVATE ${SDL2_INCLUDE_DIRS})
target_link_libraries(main PRIVATE ${SDL2_LIBRARIES})
我的 SDL2 文件夹中也有一个 SDL2Config.cmake
:
set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include")
# Support both 32 and 64 bit builds
if (${CMAKE_SIZEOF_VOID_P} MATCHES 8)
set(SDL2_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/lib/x64/SDL2.lib;${CMAKE_CURRENT_LIST_DIR}/lib/x64/SDL2main.lib")
else ()
set(SDL2_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/lib/x86/SDL2.lib;${CMAKE_CURRENT_LIST_DIR}/lib/x86/SDL2main.lib")
endif ()
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
构建此结果 'SDL.h' 未找到,这是包含 #include<SDL2.h>
.
我也试过“vcpkg”,它带有 triplets
,x64-windows
三元组允许我找到该文件,但它不会编译,因为它是为 VSCommunity 设计的。我尝试了 mingw x64-mingw-dynamic
和 x64-mingw-static
的其他三元组,但它们都未能构建包。这是我用来安装 SDL2 vcpkg install SDL2:triplet
的命令,其中 triplet
是上述命令之一。
如果您使用 vcpkg
,您需要在某处设置工具链文件。
在 CMakeLists.txt
中或者您可以在命令行参数中设置它:
1。 CMakeLists.txt
:
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake
CACHE STRING "Vcpkg toolchain file")
注意!确保路径正确!
2。作为命令行参数(我个人更喜欢这个更容易移植)
cmake .. -DCMAKE_TOOLCHAIN_FILE=C:<your-path>/vcpkg/scripts/buildsystems/vcpkg.cmake
阅读 vcpkg integration。
manifest mode 是最终的专业提示,因为这会导致干净的 CMakeLists.txt
文件和完全可移植(且无痛)的过程。