Связывание SDL2 - CLion - Ubuntu 16.04 - G ++ - PullRequest
0 голосов
/ 14 сентября 2018

Справочная информация

Как видно из названия, я нахожусь на Ubuntu 16.04 с использованием CLion и G ++ и не могу связать SDL2.

SDL2.h находится в проекте на External Libraries/Header Search Paths/include/SDL2. Это похоже на ссылку /usr/include/SDL2.

Итак, с найденным заголовочным файлом я могу #include <SDL2/SDL.h> без проблем. Тем не менее, когда я пытаюсь использовать SDL2 с чем-то вроде SDL_Init( SDL_INIT_EVERYTHING ), я получаю undefined reference.

Если я компилирую из терминала с g++ main.cpp -lSDL2 -o test, у меня нет ошибок. Но если я скомпилирую из терминала с g++ main.cpp -o test, то у меня будет та же ошибка, что и у CLion!

Вопрос

Как связать SDL2 с Cmake? Правильно ли я добавил этот флаг -lsdl2 в файл CMake? Если я правильно его добавил, то чего мне не хватает?

main.cpp

#include <iostream>
#include <SDL2/SDL.h>

int main(int argc, char* argv[]) {
    SDL_Init( SDL_INIT_EVERYTHING );
    std::cout << "Hello, World!" << std::endl;
    SDL_Quit();
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(untitled2)


set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lSDL2")

add_executable(untitled2 main.cpp)

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Можно попробовать

SET(CMAKE_CXX_LINK_FLAGS "-lSDL2")
0 голосов
/ 15 сентября 2018

Я изменил ответ, который дал @rpav. Этот проект имеет минимальный объем кода, необходимый для проверки того, что SDL2 фактически работал с CLion.

main.cpp

#include <iostream>
#include <SDL2/SDL.h>

int main(int argc, char* argv[]) {
    SDL_Init( SDL_INIT_EVERYTHING );
    std::cout << "Hello, World!" << std::endl;
    SDL_Quit();
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(untitled2)
set(CMAKE_CXX_STANDARD 11)

find_package(SDL2 REQUIRED SDL2)

add_executable(untitled2 main.cpp)

target_link_libraries(untitled2 PRIVATE SDL2)

Большая часть файла CMake предоставлена ​​CLion. Единственными дополнительными строками кода являются find_package(SDL2 REQUIRED SDL2) и target_link_libraries(untitled2 PRIVATE SDL2). Чтобы уточнить, untitled2, это название моего проекта.

0 голосов
/ 14 сентября 2018

Вам просто нужно найти пакет SDL2 и связать его с целью.Не используйте CMAKE_CXX_FLAGS для этого (или любые ссылки / пути к заголовкам / и т. Д.);попробуйте следующее:

find_package(SDL2 REQUIRED SDL2)
 : 
add_executable(untitled2 main.cpp)
target_link_libraries(untitled2
  PRIVATE SDL2::SDL2
)

При этом будут извлечены соответствующие заголовки и т. д. Обратите внимание, что это автоматически не включает SDL_main или другие библиотеки, которые могут вам понадобиться или потребоваться в дополнение.

Кроме того, для более старых версий SDL2 SDL2::SDL2 может не работать, и вы можете просто захотеть SDL2.Я бы порекомендовал обновить, если это так.

...