【问题标题】:Providing SDL2 include headers for both Win and Linux in a project在项目中为 Win 和 Linux 提供 SDL2 包含头文件
【发布时间】:2017-09-05 11:26:53
【问题描述】:
我想提供作为我项目的一部分编译的所有外部库,这样用户就不必下载任何东西。我正在使用 CMake 来管理项目。我对 SDL2 有疑问。它的包含文件对于不同的平台是相同的,除了“SDL_config.h”,它是在构建 SDL2 本身时生成的,并且依赖于编译器/平台。
因此,我需要提供两个 SDL_config.h 文件 - 一个用于 windows,一个用于 linux。如果我还想自动化构建过程,我想出了两个想法:
在 SDL 头文件中添加 ifdef _WIN32/unix 子句以包含适当的 SDL_config.h 文件
保持 SDL 文件完整并制作一个构建脚本,将正确的 SDL_config.h 文件放入包含目录中
什么是做我想做的最优雅/最常见的方式?
【问题讨论】:
标签:
linux
windows
cross-platform
sdl
sdl-2
【解决方案1】:
在 SDL 头文件中放置 ifdef _WIN32/unix 子句以包含适当的 SDL_config.h 文件
不应该针对此类问题修改库文件,或者至少它应该是您的最后一个资源。
保持 SDL 文件完整并制作一个构建脚本,将正确的 SDL_config.h 文件放入包含目录中
您正在使用 cmake。您不需要构建脚本。
创建一个目录并将SDL_config.h 的两个版本放在那里。那么:
在这两种情况下,您都必须在 CMakeLists.txt 中使用 WIN32、MSVC、UNIX、whatelse if/else 语句。编写和维护确实很烦人。
话虽如此,你还是在使用 cmake。使用到最后。
您可以探索 cmake 模块 ExternalProject,而不是为每个系统和编译器组合的每个依赖项提供编译版本。通过使用它,您可以在 cmake 运行时下载和编译即时依赖项。
到目前为止,这是一个更优雅的解决方案,它不需要您的用户在他们的机器上手动安装依赖项。此外,维护更容易,并且基于 CMakeLists.txt 中的目标系统,您没有任何难看的 if/else。