在项目的makefile中包含cpputest

问题描述 投票:0回答:1

我想在项目的源代码树中将cpputest作为git子模块包含在内,但我对自动工具并不十分熟悉。

我一直在看this page as a guide

我创建了以下Makefile,cpputest在其下面的子目录中:

CPPUTEST_BUILD_DIR := cpputest/cpputest_build

CPPUTEST_LIBS :=                           \
    $(CPPUTEST_BUILD_DIR)/libCppUTest.a    \
    $(CPPUTEST_BUILD_DIR)/libCppUTestExt.a

CPPUTEST_TESTS :=                          \
    $(CPPUTEST_BUILD_DIR)/CppUTestTests    \
    $(CPPUTEST_BUILD_DIR)/CppUTestExtTests

cpputest:                           \
    cpputest/configure              \
    $(CPPUTEST_BUILD_DIR)/Makefile  \
    $(CPPUTEST_LIBS)                \
    $(CPPUTEST_TESTS)

cpputest/configure: cpputest/configure.ac cpputest/autogen.sh
    cd cpputest && ./autogen.sh

cpputest/cpputest_build/Makefile: cpputest/configure
    cd $(CPPUTEST_BUILD_DIR) && ../configure

$(CPPUTEST_LIBS): $(CPPUTEST_BUILD_DIR)/Makefile
    cd $(CPPUTEST_BUILD_DIR) && make

$(CPPUTEST_TESTS): $(CPPUTEST_LIBS)
    cd $(CPPUTEST_BUILD_DIR) && make tdd

运行此makefile可以完成我想要的,但是我不确定这些依赖项的健壮性。除了干净的规则外,我还有什么要考虑的吗?

makefile gnu-make autotools autoconf cpputest
1个回答
0
投票

除了一条干净的规则外,我还有什么要考虑的吗?

TL; DR:您应该预先运行ccptest的autogen.sh脚本,并将所有结果文件以及其余所有文件包含在您的发行版中。然后,您可以考虑也省略构建cpputest/configure的规则(我自己确实会省略)。


Cpputest显然遵循了从源代码管理中删除Autotools生成的文件的最新趋势。从表面上看,这是有道理的,因为这些文件确实可以从源代码管理中可用的其他文件中生成。从源代码管理系统作为项目维护和开发工具的角度来看很好。但是,对于用作distribution工具的源代码控制,它是not很好。

Autotools的设计目标之一是,只有项目维护人员才需要它们本身。运行它们并不旨在成为例行构建过程的一部分,例如只想构建和运行该软件的人就会雇用他们。因此,由Autotools构建系统自己准备的分发软件包本身就包含了所有必需的位,以使其成为可能:configure脚本,支持的实用程序脚本,Makefile.in文件,有时还包括一些其他文件。这是预期的分发形式。

在这种情况下,与许多项目相比,Autotools的兼容性压力较小,并且确实表现为不同AT版本之间的兼容性较弱。如果您使用与项目维护人员本身不同的AT版本构建构建系统,则可能会遇到错误。您肯定会得到一个与维护人员使用的构建系统有所不同的构建系统。通常,结果仍然会毫无问题地构建项目,但有时不会。因此,请帮自己一个忙,避开这个问题。

运行此makefile可以满足我的要求,但是我不确定这些依赖项的健壮性。

makefile本身对我来说看起来不错。我认为要批评的主要内容是

  • cpputest/cpputest_build/Makefile的规则从字面上拼出目录部分,而不是使用$(CPPUTEST_BUILD_DIR)变量。

  • cpputest目标的直接先决条件不应包括cpputest/configure$(CPPUTEST_BUILD_DIR)/Makefile。这些对于构建过程是必需的,这是偶然的,并且已经被列出为直接依赖于它们的目标的先决条件的那些工件所解决。考虑到样式,可维护性和一般的良好实践,make规则应仅列出目标的直接先决条件。

  • 由于我建议您分发构建系统组件,而不是让所有人重新构建它们,因此,我还将删除构建cpputest/configure的规则。如果您遵循我的建议,那么您将分发一个预先构建的建议,因此用户无需构建它。省略规则,并从出现的那些先决条件列表中拉出cpputest/configure,将消除万一在时间戳加扰时一切崩溃的风险,就像复制源树时有时发生的那样。

关于clean规则,由于您是在顶级make的控制下进行cpputest配置的,因此相应的清除方法是cd $(CPPUTEST_BUILD_DIR); make distclean。但是,由于您正在执行源代码外构建,因此您还可以选择递归地删除构建目录。但是请注意,如果在构建过程中坚持运行autogen.sh,则生成的文件将不限于构建目录。在这种情况下,相应的清除可能涉及make maintainer-clean

© www.soinside.com 2019 - 2024. All rights reserved.