【发布时间】:2014-07-18 11:32:54
【问题描述】:
我前段时间问了一个问题,询问如何在编译时检查内部库版本,并提出了以下解决方案:
// 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
这会破坏存储在应用程序属性文件中的包含目录。最初我们会包含一个文件夹(Library\src),然后进行内部版本检查,现在包含目录依赖于存储在此头文件中的版本信息。我想知道是否可以在 Visual Studio 2013 中修改项目包括基于存储在头文件/源文件中的信息的目录,如本示例中的文件?我在想这可以作为某种预构建步骤来完成,或者作为预构建的一部分运行一个外部脚本来为项目生成一个包含目录?不过,我对如何做到这一点感到困惑,任何启发都将不胜感激。
提前致谢。
【问题讨论】:
-
如何创建一个预处理器宏来为
#include语句提供必要的版本前缀? -
现在包含是使用环境变量完成的,例如$(LIB) 并且必须添加一个预处理器宏(这可能是公平的)将涉及必须更改我们编写的每个应用程序中的每一个包含,我认为我的同事不会太热衷于:(
-
恕我直言,最好的选择是@Pete 在他的回答中所说的。只需使用旧结构保留头部修订,并使用适当的 SVN 外部路径链接旧版本以复制旧结构。
标签: c++ visual-c++ c++11 visual-studio-2013