【问题标题】:How to link SDL2 manually in CMake如何在 CMake 中手动链接 SDL2
【发布时间】:2020-08-16 19:40:01
【问题描述】:

最近我开始学习 CMake。为了练习,我正在尝试手动链接 SDL2。我知道还有另一种使用find_file 的方法,这很简单。但我想自己动手练习。

当我尝试链接 libSDL2main.a 文件时出现错误(使用 cmd mingw32-make 运行 Makefile)

[ 50%] Linking CXX executable exe0.exe
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: cannot find -llibSDL2main
collect2.exe: error: ld returned 1 exit status
CMakeFiles\exe0.dir\build.make:105: recipe for target 'exe0.exe' failed
mingw32-make[2]: *** [exe0.exe] Error 1
CMakeFiles\Makefile2:94: recipe for target 'CMakeFiles/exe0.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/exe0.dir/all] Error 2
Makefile:102: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(SDL_Test_Project)
include_directories(include)
add_executable(exe0 main.cpp)
target_link_libraries(exe0 libSDL2main.a)

这里的 main.cpp 只是一个源文件。我已将SDL2.dlllibSDL2main.a 放入项目目录的根目录。 (我使用 CMake GUI 在 Windows 10 中生成 Makefile)。

【问题讨论】:

  • 试试target_link_libraries(exe0 SDL2main SDL2)

标签: c++ cmake mingw sdl-2 cmake-gui


【解决方案1】:

如果您想直接在 target_link_libraries() 中链接到 SDL2 库(不定义 IMPORTED 目标,或使用 find_library()),请使用每个库的完整路径。 CMAKE_SOURCE_DIR 变量提供了 CMake 项目根目录的完整路径:

target_link_libraries(exe0 PRIVATE 
    mingw32 
    ${CMAKE_SOURCE_DIR}/libSDL2main.a
    ${CMAKE_SOURCE_DIR}/SDL2.dll
)

注意,对于 SLD2,在使用 MinGW 进行编译时,您可能还需要在此命令中添加 mingw32

【讨论】:

  • 感谢您的回答。但我仍然收到错误说未定义的引用 `WinMain@16'
  • @Vignesh 这是一个不同的错误,有几个答案here 你可能会觉得有用。也许,您可以将 mwindows 添加到您的 target_link_libraries() 呼叫的末尾。
  • 我找到了解决方案。 mingw32 必须先链接。 mingw32 必须在 PRIVATE 之后添加。您可以编辑您的答案,以便其他人可能会觉得有帮助
  • @Vignesh 好的,我修改了回复以反映您的建议。希望这有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多