gpt4 book ai didi

c++ - 使用头文件变量生成包含目录

转载 作者:行者123 更新时间:2023-11-28 06:46:53 24 4
gpt4 key购买 nike

我前段时间问了一个关于如何在编译时检查内部库版本的问题,并提出了以下解决方案:

// GameVersion.h
constexpr unsigned int LIB_VERSION_MAJOR = 1;
constexpr unsigned int LIB_VERSION_MINOR = 0;
constexpr unsigned int LIB_VERSION_PATCH = 0;

// Function stored in our librarys which static_asserts version with its own data
library_version_check<LIB_VERSION_MAJOR, LIB_VERSION_MINOR, LIB_VERSION_PATCH>();

这不是最好的解决方案,但它确实允许我们在编译时检查库版本,而不是构建应用程序并等待它运行才能发现库版本不匹配。

从那时起,我们使用的库改变了它们的文件结构:

C:\Library\src            //!< Old structure
C:\Library\1.0.0\src //!< New structure
C:\Library\1.0.1\src

这会破坏存储在应用程序 prop 文件中的 include 目录。最初我们会包含一个文件夹 (Library\src) 然后进行内部版本检查,现在包含目录依赖于存储在这个头文件中的版本信息。我想知道是否有可能在 Visual Studio 2013 中修改项目包括基于存储在头文件/源文件中的信息的目录,就像本例中的那样?我在想这可以作为某种预构建步骤来完成,或者外部脚本作为预构建的一部分运行以生成项目的 inculde 目录?不过,我对如何执行此操作感到困惑,我们将不胜感激。

提前致谢。

最佳答案

执行此操作的一种方法是使用用户宏进行构建。不熟悉 VS2013,因为我需要我的东西仍然可以在 XP 上运行并且不能“升级”。我没有使用过 msbuild,所以不知道从旧的构建系统中继承了多少东西。

也就是说,在 VS2008 中,您可以在 .vsprops 文件中为 3 个版本号设置用户宏。这些可用于通过作为参数传递给预构建步骤来生成版本信息文件。例如

make-ver.exe GameVersion.h $(VerMajor) $(VerMinor) $(VerPatch)

然后,您可以在整个构建配置中随意使用这些用户宏,并且这些宏会通过构建在您的源代码中自动更新。

除了这种方法,你能不能只使用旧的结构来修改头部?

然后,当您发布一个版本时,使用其版本信息将文件复制到版本化文件夹(即将版本信息嵌入到 exe/dll 的资源中)。

有提取版本资源的windows API。参见 GetFileVersionInfo .使用它,您可以编写一个简单的 exe 来为您进行复制。

当我为几个项目构建安装程序时,我会做类似的事情。构建安装程序后,它会从主 exe 获取版本信息并将其附加到安装程序的文件名中。

我个人不为依赖项的版本化源文件夹而烦恼——依赖项都在 SVN 外部,并且与主 exe 同时构建。这些在每个版本中都使用一个特殊的脚本标记,该脚本与外部的 SVN 版本 Hook 。

关于c++ - 使用头文件变量生成包含目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24824055/

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