Как связать SDL2 вручную в CMake - PullRequest
0 голосов
/ 02 мая 2020

Недавно я начал изучать CMake. На практике я пытаюсь связать SDL2 вручную. Я знаю, что есть другой способ использования find_file, который прост. Но я хочу сделать это сам для практики.

Я получаю сообщение об ошибке при попытке связать файл libSDL2main.a (при запуске Makefile с использованием cmd mingw32-make)

[ 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.dll и libSDL2main.a в root каталога проекта . (Я использовал CMake GUI для генерации Makefile в Windows 10).

1 Ответ

0 голосов
/ 02 мая 2020

Если вы хотите связать библиотеки SDL2 напрямую в target_link_libraries() (без определения целей IMPORTED или использования find_library()), используйте путь full к каждой библиотеке. Переменная CMAKE_SOURCE_DIR предоставляет полный путь к каталогу root проекта CMake:

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

Примечание. Для SLD2 вам также может понадобиться добавить mingw32 этой команде при использовании MinGW для компиляции.

...