首页 > 解决方案 > 在 Qt Creator 中将库链接到 CMake (MSVC)

问题描述

我正在使用 SDL2 库做项目。它适用于 Ubuntu,但经过很长时间我无法在 Windows 上编译它。我使用 Qt creator 作为 IDE,并尝试了很多在互联网上找到的解决方案。目前,我的 IDE 检测到文件,但我无法构建它,因为我在应用程序中使用的每个函数(甚至是我自己编写的函数和 main 函数)都会抛出错误LNK2019: unresolved external symbol ...,当我想查看时,问题出在哪里,所以我点击出错时,它只是写File not found: FILE.cpp.obj.

我当前的CMakeLists.txt如下所示:

cmake_minimum_required(VERSION 3.7)

project(Joystick)
set(SDL2_LIBRARIES D:/Projects/Libs/SDL2-2.0.9/lib/x64/)
set(SDL2_INCLUDE_DIR D:/Projects/Libs/SDL2-2.0.9/include)

add_executable(${PROJECT_NAME} "main.cpp" "JoystickController.cpp" "JoystickController.h" "UDPSender.cpp" "UDPSender.h" "JoystickErrors.h")

include_directories(${PROJECT_NAME} ${SDL2_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})

我对CMake没有太多经验,因为我每次构建应用程序时都使用qmake,但这次我被迫使用CMake。这个文件是由互联网教程制作的,所以我真的不知道它是好是错,但这是我的 IDE 加载头文件的唯一方式。

奇怪的是,在我使用的 Linux 系统#include <SDL/...h>上,但在 Windows 上,我只使用#include <...h>,因为第一种方法找不到文件。

我在哪里做错了?将此库添加到 CMakeList 的正确方法是什么?

谢谢您的帮助。

标签: c++cmakeqt-creator

解决方案


假设您从源代码构建 SDL,您可以轻松导入 SDL 的目标。

对于构建 SDL:

mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=c:/local/ ..
cmake --build . --target install

然后,在您的项目中:

cmake_minimum_required(VERSION 3.7)

project(Joystick)

add_executable(Joystick main.cpp JoystickController.cpp UDPSender.cpp)

target_link_libraries(Joystick PUBLIC SDL2:SDL2)

然后在调用 CMake 时,为您的库指定前缀:

cmake -DCMAKE_PREFIX_PATH=c:/local/ ..

在 linux 上,默认前缀将查找任何系统库。


推荐阅读