在 Qt Creator 中将库链接到 CMake (MSVC)

Linking libraries to CMake (MSVC) in Qt Creator

我正在使用 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 的正确方法是什么?

感谢您的帮助。

假设您从源代码构建 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 上,默认前缀将找到任何系统库。