gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:11 26 4
gpt4 key购买 nike

我想提供所有编译为我项目一部分的外部库,这样用户就不必下载任何东西。我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com