ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-02 10:56:12  阅读:278  来源: 互联网

标签:automake portability python


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

标签:automake,portability,python
来源: https://codeday.me/bug/20191102/1990843.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有