gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:56 25 4
gpt4 key购买 nike

我有一个用 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:

如果您真正想做的是将 python 测试程序脚本作为 make check 的一部分运行,我会这样做:

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在 automake 手册中。

关于python - 如果 Python 可用,则有选择地启用测试程序 - automake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6878756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com