libgit2 - c: 我怎么知道正在使用哪个版本

libgit2 - c: how can I tell which version is being used

我正在编写一个使用 libgit2 的应用程序:

https://github.com/eantoranz/gitmod

有时我正在使用 types.h:

中定义的枚举值

https://github.com/libgit2/libgit2/blob/a83fd5107879d18b31ff8173ea062136256321be/include/git2/types.h#L77

但我刚刚注意到在以前的版本中它被称为GIT_OBJ_TREE:

https://github.com/libgit2/libgit2/blob/45c6187cbfdcfee2bcf59a1ed3a853065142f203/include/git2/types.h#L72

问题是,我怎么知道正在使用哪个版本的 libgit2?我虽然也许有一个定义的值,我可以使用它,然后使用类似的东西:

#ifdef GIT2_0_28
// use GIT_OBJECT_TREE
#else
// use GIT_OBJ_TREE
#endif

但我没有看到类似的东西。我还能使用什么技巧?

最终使用了来自 https://github.com/libgit2/libgit2/blob/v0.28.0/include/git2/version.h 的东西。

在我的文件中:

#if LIBGIT2_SOVERSION < 28 // old implementation
#define GIT2_OBJECT_TREE GIT_OBJ_TREE
#else // new implementation
#define GIT2_OBJECT_TREE GIT_OBJECT_TREE
#endif

然后在我的代码中使用 GIT2_OBJECT_TREE

将把这个标记为答案,直到出现更好(更简单)的答案。

如果你想识别 libgit2 的版本,那么我不会使用 LIBGIT_SOVERSION, since that's a string that defines the "so-version",它是 ABI 版本,而不是 API 版本。而且它是一个字符串,这使它变得复杂测试。

我会查看 major/minor/teeny 版本号,它们绝对是整数。

#if LIBGIT2_VER_MAJOR == 0 && LIBGIT2_VER_MINOR < 28
# ...
#endif

但在这种情况下,我根本不会看 API 版本 - 你不需要看。

如果您确实想要针对 0.28 之前的版本和更高版本,那么只需使用 GIT_OBJ_TREE。虽然 GIT_OBJ_TREE 已被弃用,但它仍然作为 libgit2 的 safe deprecation layer 的一部分可用,默认情况下启用。

它最早要到 libgit2 v2.0 才会被删除。