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

如果Python可用,有选择地启用测试程序-automake,python,portability,automake,Python,Portability,Automake,我有一个用C编写的程序,使用automake/autoconf构建,有两个测试套件。一个是同样用C编写的单元测试套件;另一个是端到端的,并且(目前)是用Python编写的。我希望“makecheck”始终运行单元测试,并且仅当安装了Python时才运行端到端测试。这就是我现在拥有的: TESTS = unittests if HAVE_PYTHON TESTS += tester.py tester_py_SOURCES = src/test/tester.py.in tester.py: s

我有一个用C编写的程序,使用automake/autoconf构建,有两个测试套件。一个是同样用C编写的单元测试套件;另一个是端到端的,并且(目前)是用Python编写的。我希望“makecheck”始终运行单元测试,并且仅当安装了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
这在Unix上正常工作,但在Windows上“没有规则生成tester.py.exe”。另外,获取
#的复制和替换技术右行表示我不能将测试套件分解为多个模块


有更好的方法吗?

您必须仅将
\u源代码
用于已编译的内容,这就是为什么添加
$(EXEXT)
。试试这个:

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
这将使用
config.status
和自动生成重建规则重新生成脚本

编辑1:

如果您真正想做的是运行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

参见汽车制造手册。

检查脚本
,当然,我应该想到这一点。至于另一个,我认为你不能把
AC_CONFIG_文件
放在
As_IF
中,但无论如何,这不能解决必须将所有内容放在一个与Python风格相反的大文件中的问题。这里我真正想要的是一种让
检查测试
目标运行“
$(PYTHON)$(srcdir)/src/test/tester.py
”的方法,而不仅仅是“
/tester.py
”。(我可能最终会放弃并编写一个包装器脚本,但我会避免这样做,因为这样我就必须处理更多的Windows垃圾。)是的,检查本地似乎是一种方式。谢谢
check-local:
if HAVE_PYTHON
        $(PYTHON) $(srcdir)/src/test/tester.py
endif
check-local:
        test "$(PYTHON)" != ":" && $(PYTHON) $(srcdir)/src/test/tester.py