我正在使用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的正确方法是什么?
谢谢您的帮助。
答案 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上,默认前缀将找到所有系统库。