微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Project CMake中正确包含SDL2源代码

如何解决如何在Project CMake中正确包含SDL2源代码

我对如何静态包含SDL2的源代码感到困惑。我正在尝试这样做,以使我正在开发的库更加可移植。

当前,当我尝试将库包含在另一个项目中时,它会显示“无法打开包含文件:'SDL2 / SDL.h':没有此类文件或目录”

我的文件系统:

include
--Header Files
src
--Source Files
extern
--SDL2
build

以下是导致错误文件示例:

#include <iostream>
#include <SDL2/SDL.h> //Error

using namespace std;

/* The code */

这是我的主要CMakeLists.txt的示例:

cmake_minimum_required(VERSION 3.7)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

project(MyProject VERSION 1.0.0)

set(SDL2_SOURCE_DIR “${CMAKE_SOURCE_DIR}/extern/SDL2”)
add_subdirectory(extern/SDL2)
add_subdirectory(src)

这是我的src CMakeLists.txt的示例:

set(PROJECT_NAME MyProject)

file(GLOB HEADER_FILES "${CMAKE_SOURCE_DIR}/include/*.h")
file(GLOB SOURCES "*.cpp")

add_library(${PROJECT_NAME} ${SOURCES} ${HEADER_FILES})

target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_SOURCE_DIR}/include")

target_link_libraries(${PROJECT_NAME} PRIVATE SDL2main SDL2-static)

set_target_properties( ${PROJECT_NAME}
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin"
)

解决方法

add_subdirectory()将子目录作为cmake项目处理(处理SDL提供的CMakeLists.txt)。如果阅读该CMakeLists.txt,则会看到它添加了相对于SDL2_SOURCE_DIR的包含目录,该目录默认为空。

我将尝试将SDL2_SOURCE_DIR设置为$ {CMAKE_CURRENT_SOURCE_DIR} / extern / SDL2,以使路径绝对。像那样的SDL include dirs在您的项目中的任何地方都有效。

您还可以使用include_directories()指令手动添加正确的包含。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?