Makefile - 如何组织和构建多个库版本

时间:2017-11-24 09:08:33

标签: c makefile build msbuild

我正在尝试创建一个构建系统,但我应该使用的结构不清楚。 我有各种库文件及其相关的包含。 这些库文件(或模块)可能具有各种版本。因此,module1可能只有1个版本,但ModuleN可能有50个版本。 现在我的问题是我不知道如何组织我的树,以便我可以为给定的版本构建我的Library.a包。

我的第一个问题是以下列方式组织我的文件:

           Libraries                      Includes
               ¦                              ¦
    ----------------------          ----------------------
    ¦          ¦          ¦         ¦          ¦          ¦
   V1.0      V1.1       V1.2       V1.0      V1.1       V1.2
    ¦          ¦          ¦         ¦          ¦          ¦         
 Lib1.c     Lib3.c     Lib2.c     Lib1.h     Lib3.h     Lib2.h   
 Lib2.c                Lib3.c     Lib2.h                Lib3.h
 Lib3.c                           Lib3.h
 Lib4.c                           Lib4.h 

现在,我将如何构建我的包V1.2,考虑到它还需要在整个树中合并最新库的联合(即.V1.2包= V1.0 U V1.1 U V1.2 )。在这种情况下,手动定义规则并不困难,但是它会很快变得无法管理100个文件。

在通常的做法中,可能会将未更改的文件从版本复制到下一个版本,但很难知道它在哪里。

这个问题是否有典型方法?

1 个答案:

答案 0 :(得分:0)

我知道OP说他不想使用Git,所以这个答案更适合其他读这个问题的人。

从存储库构建任意版本的一种常见做法是使用标记。标记是一种突出显示特定提交的方法。 Git支持两种类型的标记:轻量级和注释。

轻量级标签就像一个分支。它只是一个提交指针。与分支的区别在于此指针不会随新提交而改变。建议不要将这些标签用于您的目的。它们在开发过程中更适合开发人员。要创建轻量级标记,请使用此命令

git tag <name>

其他标记类型是带注释的标记。它们包含更多信息并经过校验和。这些是您要用于发布的。与提交一样,您可以为带注释的标记指定标记消息。要创建带注释的标记,请使用以下命令:

git tag -a <name>

这将打开一个编辑标签消息的编辑器。您也可以使用-m "<message>"

在命令行上指定消息

要查看所有代码,只需使用:

git tag

您可以像结帐分支一样结帐标签:

git checkout <tag>

在此处详细了解标记:https://git-scm.com/book/en/v2/Git-Basics-Tagging

因此,您所做的是为每个与发布对应的提交创建一个(最好是带注释的)标记。然后,假设您可以通过调用make来构建项目,您可以使用这两个命令构建任何版本:

git checkout <tag>
make

注意:在上面的评论中,我在谈论分支机构。那是我的暂时混淆。为此目的可以使用分支,但标记是正确的方法。