为项目中的Win和Linux提供SDL2头文件

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

因此我需要提供两个SDL_config.h文件 – 一个用于windows,一个用于linux。 如果我也想自动化构build过程,我已经提出了两个想法:

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

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

是否有一个与eventfd相当的Windows?

跨平台networking代码在C + +?

我可以在我的Mac上生成可在Windows上使用的python可执行文件吗?

SWT:在Windows中运行在OSX上开发的应用程序

我需要debuggingpthreads?

什么是做我想要的最优雅/平常的方式?

Qt程序在Windows中的多段线绘图上崩溃

使用Symfony Process运行asynchronousPHP任务

我如何制作一个Java跨平台的GUI应用程序(Windows,Linux)? 我应该使用什么工具?

C编程 – Linux和OSX之间的区别

在C中改变当前进程的优先级

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

修改库文件这样的问题不应该是一个选项,或者至少它应该是你的最后一个资源。

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

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

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

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

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

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

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

在这两种情况下,都必须在CMakeLists.txt使用WIN32 , MSVC , UNIX和whatelse if / else语句。 相当恼人的写作和保持的确如此。

这就是说,你再次使用cmake。 用它来结束。

您可以浏览cmake模块ExternalProject ,而不是为每个系统和编译器的每个组合提供每个依赖项的编译版本。 通过使用它,您可以在cmake运行时下载和编译即时依赖项。

这是一个更加优雅的解决方案,不需要用户在他们的机器上手动安装依赖项。 而且,维护更容易,而且基于CMakeLists.txt的目标系统,没有任何丑陋的if / else。

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...