为项目中的 Win 和 Linux 提供 SDL2 包含 headers
Providing SDL2 include headers for both Win and Linux in a project
我想提供作为我项目的一部分编译的所有外部库,这样用户就不必下载任何东西。我正在使用 CMake 来管理项目。我对 SDL2 有疑问。它的包含文件对于不同的平台是相同的,除了 "SDL_config.h" 是在构建 SDL2 本身时生成的并且是 compiler/platform 依赖的。
因此,我需要提供两份 SDL_config.h 文件 - 一份用于 windows,一份用于 linux。如果我还想自动化构建过程,我想出了两个想法:
在 SDL header 文件中加入 ifdef _WIN32/unix 子句以包含适当的 SDL_config.h 文件
保持 SDL 文件完整并制作一个构建脚本,将正确的 SDL_config.h 文件放入包含目录
什么是最elegant/usual做我想做的事情的方法?
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.
在这两种情况下,您必须在您的文件中使用 WIN32
、MSVC
、UNIX
、whatelse if/else 语句CMakeLists.txt
。编写和维护确实很烦人。
也就是说,您正在使用 cmake。用到最后。
您可以探索 cmake 模块 ExternalProject
,而不是为每个系统和编译器组合的每个依赖项提供编译版本。通过使用它,您可以在 cmake 运行时下载和编译即时依赖项。
到目前为止,这是一个更优雅的解决方案,不需要您的用户在他们的机器上手动安装依赖项。此外,维护更容易,并且您的 CMakeLists.txt
.
中没有基于目标系统的丑陋 if/else
我想提供作为我项目的一部分编译的所有外部库,这样用户就不必下载任何东西。我正在使用 CMake 来管理项目。我对 SDL2 有疑问。它的包含文件对于不同的平台是相同的,除了 "SDL_config.h" 是在构建 SDL2 本身时生成的并且是 compiler/platform 依赖的。
因此,我需要提供两份 SDL_config.h 文件 - 一份用于 windows,一份用于 linux。如果我还想自动化构建过程,我想出了两个想法:
在 SDL header 文件中加入 ifdef _WIN32/unix 子句以包含适当的 SDL_config.h 文件
保持 SDL 文件完整并制作一个构建脚本,将正确的 SDL_config.h 文件放入包含目录
什么是最elegant/usual做我想做的事情的方法?
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.
在这两种情况下,您必须在您的文件中使用 WIN32
、MSVC
、UNIX
、whatelse if/else 语句CMakeLists.txt
。编写和维护确实很烦人。
也就是说,您正在使用 cmake。用到最后。
您可以探索 cmake 模块 ExternalProject
,而不是为每个系统和编译器组合的每个依赖项提供编译版本。通过使用它,您可以在 cmake 运行时下载和编译即时依赖项。
到目前为止,这是一个更优雅的解决方案,不需要您的用户在他们的机器上手动安装依赖项。此外,维护更容易,并且您的 CMakeLists.txt
.