c++ - 在 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 的正确方法是什么?
谢谢您的帮助。
解决方案
假设您从源代码构建 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 上,默认前缀将查找任何系统库。
推荐阅读
- asp.net - 如何处理每个请求的会话 Asp.net mvc
- java - 当其他人点击他们想去的点时如何进行路线申请
- matlab - Matlab - 如何用扭曲的图像变换点
- c - 是否有可能在 5*5 矩阵中使用共阳极配置以方形发光 LED
- java - 创建弹出窗口的问题
- java - 无法从片段内的接口获取数据
- ios - 在 iOS 中同步获取 ApplicationState
- linux - ubuntu 网络服务器上的 apache2 拒绝访问除交付的 index.html 之外的任何其他文件的权限
- openmodelica - 在 OpenModelica 中实现可调参数
- php - 用 FOREACH 代替 FOR 打印数组的#number