Makefile.am/Configure.ac 条件环境变量检查

Makefile.am/Configure.ac Conditional Environment Variable Check

我正在尝试在 Linux 上启用和禁用 C++ 中 gcov 的编译标志。我不想一直设置 gcov 标志。我只希望在测试软件时设置它们。我正在检查的环境变量称为 TESTENABLED。

在我的 configure.ac 文件中有以下行:

AM_CONDITIONAL([ENABLEGCOV],[test x$TESTENABLED = xtrue])

在我的 Makefile.am 文件中有以下几行:

if ENABLEGCOV
AM_CXXFLAGS = -Wall -fPIC -fprofile-arcs -ftest-coverage
else
AM_CXXFLAGS = -Wall
endif

然而,当我构建我的程序时,我注意到它没有正确设置 AM_CXXFLAGS。因此,正在生成 none 个 gcov .gcno/.gcda 文件。有人看到我做错了什么吗?

您是否将环境变量设置为 true,或者可能设置为其他真实值(例如 1)?

在任何情况下,通常的方法是向 configure 添加一个标志以打开某个功能。下面的 configure.ac 片段添加了一个 --enable-gcov 标志来配置;它也会打印输出是否启用了 gcov:

AC_ARG_ENABLE(gcov,[AS_HELP_STRING([--enable-gcov], [enable coverage test])])
AC_MSG_CHECKING([whether to enable gcov])
AS_IF([test "x${enable_gcov}" = "xyes" ], AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]))
AM_CONDITIONAL([ENABLEGCOV],[test "x${enable_gcov}" = "xyes"])

我还发现 Makefile.am 如果满足特定条件,只需 添加 标志到 CXXFLAGS 更容易阅读:

AM_CXXFLAGS = -Wall -fPIC
if ENABLEGCOV
AM_CXXFLAGS += -fprofile-arcs -ftest-coverage
endif