代码之家  ›  专栏  ›  技术社区  ›  karafar

链接SDL2-CLion-ubuntu16.04-G++

  •  1
  • karafar  · 技术社区  · 7 年前

    背景信息

    SDL2.h位于 External Libraries/Header Search Paths/include/SDL2 . 这似乎与 /usr/include/SDL2 .

    所以,找到头文件后,我可以 #include <SDL2/SDL.h> SDL_Init( SDL_INIT_EVERYTHING ) undefined reference

    如果我从终端编译 g++ main.cpp -lSDL2 -o test g++ main.cpp -o test ,那么我和克莱恩有同样的错误!

    如何将SDL2链接到Cmake?我加了这个旗子吗 -lsdl2 到CMake文件正确吗?如果我加得恰到好处,那我还缺什么?

    主.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;
    }
    

    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 回复  |  直到 7 年前
        1
  •  3
  •   rpav    7 年前

    您只需要搜索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

        2
  •  1
  •   HugoTeixeira    7 年前

    你可以试试

    SET(CMAKE_CXX_LINK_FLAGS "-lSDL2")
    
        3
  •  1
  •   karafar    7 年前

    我修改了rpav给出的答案。这个项目只需要最少的代码就可以测试SDL2实际上是在使用CLion。

    主.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 ,是我的项目的名称。