【问题标题】:How To Properly Include SDL2 Source Code in Project CMake如何在 CMake 项目中正确包含 SDL2 源代码
【发布时间】:2020-09-14 02:13:43
【问题描述】:

我对如何静态包含 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"
)

【问题讨论】:

    标签: c++ cmake sdl-2


    【解决方案1】:

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

    我会尝试将 SDL2_SOURCE_DIR 设置为 ${CMAKE_CURRENT_SOURCE_DIR}/extern/SDL2 以使路径成为绝对路径。就像 SDL 包含目录将在您的项目中的任何地方都有效。

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

    【讨论】:

    • 我应该使用 include_directories() 而不是 target_include_directories()。我还应该将 SDL2 文件编译到我的 add_library 函数中吗?
    • 当您想要精确控制哪些目录包含哪些目标时,请使用 target_include_directories。一般来说 include_directories 更可取,因为它会自动影响所有目标。 SDL CMakeLists.txt 已经有一个 add_library,我认为它应该导出一个变量来指示编译库的位置,以便您可以在 target_link_libraries 中使用它。
    • 感谢您的帮助,但是SDL.h找不到的错误仍然存​​在。你有什么其他的想法吗
    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多