正如标题所说,我在使用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有同样的错误!
如何将SDL2链接到Cmake?我是否正确地将此标志-lsdl2
添加到CMake文件中?如果我正确地添加它,那么我错过了什么?
#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)
您只需搜索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
。不过,如果是这种情况,我建议升级。
你可以试试
SET(CMAKE_CXX_LINK_FLAGS "-lSDL2")
我修改了@rpav给出的答案。该项目具有测试SDL2实际上与CLion一起工作所需的最少量代码。
#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)
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
,是我的项目的名称。