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

标签 c++ sdl-2 clion

背景信息

正如标题所说,我在 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)

最佳答案

您只需搜索 SDL2 包并将其链接到目标。不要为此使用 CMAKE_CXX_FLAGS(或任何类型的链接/ header 路径/等);尝试以下操作:

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

这将为 header 等引入适当的内容。请注意,这不会自动包含 SDL_main 或您可能需要或想要的其他库。

此外,对于旧版本的 SDL2,SDL2::SDL2 可能不起作用,您可能只需要 SDL2。不过,如果是这种情况,我会建议升级。

关于c++ - 链接 SDL2 - CLion - Ubuntu 16.04 - G++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338274/

相关文章:

c++ - `typedef typename Foo<T>::Bar Bar'的模板声明

无法创建用于在 Windows 中运行 SDL 游戏的可执行文件(错误 : previous declaration of SDL_main was . ..)

python - 使用sdl2绘制轮廓圆

memory - 超大型项目的最佳 CLion VM 内存设置

c++ - 标准库和GCC的CLion链接器错误

c++ - 在 C++ 中创建 main 函数的几个场景

c++ - 根据继承更改对象类型

c++ - qt 图表删除标题/图例/的空间

c - 我必须在 GL/glew.h 之后包含 SDL_opengl.h 吗?

c++ - 检测 Windows TDR 并从中恢复?