提供SDL2包括项目中Win和Linux的标头

时间:2017-09-05 11:26:54

标签: 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文件放在include目录中

  3. 做我想做的最优雅/最常用的方式是什么?

1 个答案:

答案 0 :(得分:1)

  

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

修改库文件以解决此类问题永远不应该是一个选项,或者至少它应该是您的最后一个资源。

  

保持SDL文件不变,并制作一个构建脚本,将正确的SDL_config.h文件放在include目录中

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

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

  • 如果你想要在复制期间替换变量(路径或其他),可能cmake命令configure_file正是你要找的:

      

    将文件复制到其他位置并修改其内容

  • 否则,如果你想要的只是将文件从某个位置复制到另一个位置,那么cmake命令file就是COPY签名的方式:

      

    COPY签名将文件,目录和符号链接复制到目标文件夹。

在这两种情况下,您必须在WIN32中使用MSVCUNIXCMakeLists.txt whatelse if / else语句。非常讨厌写作和维护。

再说一遍,你正在使用cmake。用到最后。
您可以浏览cmake模块ExternalProject,而不是为系统和编译器的每个组合提供每个依赖项的编译版本。通过使用它,您可以在cmake运行时下载和编译动态依赖项 这是迄今为止更优雅的解决方案,不需要您的用户在其计算机中手动安装依赖项。此外,维护更容易,并且您CMakeLists.txt中的目标系统没有任何丑陋的if / else。