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

时间:2019-02-17 23:06:04

标签: c++ cmake qt-creator

我正在使用SDL2库进行项目。它可以在Ubuntu上运行,但是很长一段时间后我无法在Windows上编译它。我正在使用Qt Creator作为IDE,并尝试了许多在Internet上找到的解决方案。目前,我的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。该文件是由Internet教程制作的,所以我真的无法确定它的好坏,但这只是我的IDE加载头文件的唯一方式。

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

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

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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