linux - 为项目中的 Win 和 Linux 提供 SDL2 包含 header

标签 linux windows cross-platform sdl sdl-2

我想提供所有编译为我项目一部分的外部库,这样用户就不必下载任何东西。我正在使用 CMake 来管理项目。我对 SDL2 有疑问。它的包含文件对于不同的平台是相同的,除了“SDL_config.h”是在构建 SDL2 本身时生成的并且依赖于编译器/平台。

因此,我需要提供两个 SDL_config.h 文件 - 一个用于 Windows,一个用于 Linux。如果我还想自动化构建过程,我想到了两个想法:

  1. 在 SDL 头文件中放置一个 ifdef _WIN32/unix 子句以包含适当的 SDL_config.h 文件

  2. 保持 SDL 文件完整并制作一个构建脚本,将正确的 SDL_config.h 文件放入包含目录

做我想做的事情的最优雅/最常用的方法是什么?

最佳答案

Put an ifdef _WIN32/unix clause in the SDL header files to include the appropriate SDL_config.h file

为此类问题修改库文件永远不应该是一种选择,或者至少它应该是你最后的资源。

Keep the SDL files intact and make a build script that would put the correct SDL_config.h file in the include directory

您正在使用 cmake。您不需要构建脚本。


创建一个目录并将SDL_config.h 的两个版本放在那里。然后:

  • 如果您在复制过程中想要替换内部变量(路径或其他),可能是 cmake 命令 configure_file是你要找的:

    Copy a file to another location and modify its contents

  • 否则,如果您只想将文件从一个位置复制到另一个位置,cmake 命令 file是进入其 COPY 签名的方式:

    The COPY signature copies files, directories, and symlinks to a destination folder.

在这两种情况下,您都必须使用 WIN32MSVCUNIXwhatelse if/else 语句在您的 CMakeLists.txt 中。编写和维护确实很烦人。


也就是说,您正在使用 cmake。用到最后。
您可以浏览 cmake 模块 ExternalProject,而不是为每个系统和编译器组合的每个依赖项提供编译版本。 .通过使用它,您可以在运行 cmake 时下载并即时编译依赖项。
到目前为止,这是一个更优雅的解决方案,不需要您的用户在他们的机器上手动安装依赖项。此外,维护更容易,并且您不会在 CMakeLists.txt 中有任何基于目标系统的难看的 if/else。

关于linux - 为项目中的 Win 和 Linux 提供 SDL2 包含 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46053833/

相关文章:

c++ - 从另一个线程调用 socket->native_handle()

linux - 在 Linux 上运行 Java FX 2.0 应用程序时出现黑屏

java - Maven如何根据平台配置更改依赖版本(MySQL)

c# - 如何更改 Xamarin.Forms 中的应用程序图标?

linux - 是否有通过 s3cmd 工具设置 cors(跨源资源共享)的选项?

python - 如何在python中通过SSH注入(inject)命令?

.net - CefSharp 不能在 WIndows 7 中运行

windows - 使用不带HyperV的Docker客户端

android - 带有图像和文本的按钮以及图像下方的文本,如何?

C#/Java/Ruby - 密码哈希算法 - 跨语言/平台