链接SDL2 - CLion - Ubuntu 16.04 - G ++

问题描述 投票:1回答:3

Background info

正如标题所说,我在使用CLion和G ++的Ubuntu 16.04上,我无法链接SDL2。

SDL2.h位于External Libraries/Header Search Paths/include/SDL2的项目中。这似乎链接到/usr/include/SDL2

所以,随着头文件的发现,我可以#include <SDL2/SDL.h>没有任何问题。然而,当我尝试使用像SDL_Init( SDL_INIT_EVERYTHING )这样的SDL2时,我得到了一个undefined reference

如果我使用g++ main.cpp -lSDL2 -o test从终端编译,我没有错误。但是,如果我使用g++ main.cpp -o test从终端编译,那么我和CLion有同样的错误!

Question

如何将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)
c++ sdl-2 clion
3个回答
2
投票

您只需搜索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。不过,如果是这种情况,我建议升级。


1
投票

你可以试试

SET(CMAKE_CXX_LINK_FLAGS "-lSDL2")

0
投票

我修改了@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,是我的项目的名称。

© www.soinside.com 2019 - 2024. All rights reserved.