如果Python可用,则有选择地启用测试程序-automake

我有一个用C编写的程序,使用automake / autoconf构建,并且具有两个测试套件.一个是也用C编写的单元测试套件.另一个是端到端的(当前)是用Python编写的.我希望“ make check”始终运行单元测试,并且仅当安装了Python时才进行端到端测试.这就是我现在所拥有的:

TESTS = unittests
if HAVE_PYTHON
TESTS += tester.py
tester_py_SOURCES = src/test/tester.py.in

tester.py: src/test/tester.py.in Makefile
        $(SED) -e 's,[@]PYTHON[@],$(PYTHON),' < $< > $@
        chmod +x $@
endif

HAVE_PYTHON由配置脚本使用

AM_PATH_PYTHON([2.6],, [:])
AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != ":"])

这在Unix上可以正常工作,但在Windows上会出现“没有规则可以生成tester.py.exe”的问题.同样,获得#!的复制和替换技术.右行表示我无法将测试套件分解为多个模块.

有一个更好的方法吗?

解决方法:

您必须仅将_SOURCES用于已编译的内容,因此这就是添加$(EXEEXT)的原因.尝试这个:

TESTS = unittests
if HAVE_PYTHON
TESTS += tester.py
# Possibly use += here depending on the rest of your Makefile.am
check_SCRIPTS = tester.py
# I added $(srcdir) here so VPATH builds still work.
tester.py: $(srcdir)/src/test/tester.py.in Makefile
        $(SED) -e 's,[@]PYTHON[@],$(PYTHON),' < $< > $@
        chmod +x $@
endif

您有什么原因不只是通过configure.ac进行替换吗?

AS_IF([test "$PYTHON" != ":"], [AC_CONFIG_FILES([src/test/tester.py])])

这将使用config.status重新制作脚本并自动生成重建规则.

编辑1:

如果您真正想做的是在make check中运行python tester脚本,则可以这样做:

check-local:
if HAVE_PYTHON
        $(PYTHON) $(srcdir)/src/test/tester.py
endif

(我将check-local放在if HAVE_PYTHON之外,以便在需要时可以定义其他命令作为check-local的一部分运行.)

您可能更喜欢编写以下代码:

check-local:
        test "$(PYTHON)" != ":" && $(PYTHON) $(srcdir)/src/test/tester.py

请参见自动制作手册中的extending.

上一篇:php变量


下一篇:c – 如何克服“’系统上缺少’aclocal-1.15’”警告?