【问题标题】:Makefile.am/Configure.ac Conditional Environment Variable CheckMakefile.am/Configure.ac 条件环境变量检查
【发布时间】:2015-11-18 10:49:26
【问题描述】:

我正在尝试在 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。所以我的 gcov .gcno/.gcda 文件都没有生成。有人看到我做错了吗?

【问题讨论】:

  • 如果有人有话要说,他们会这样做;即使没有你提醒他们(这不是邮件列表)

标签: c++ linux makefile automake gcov


【解决方案1】:

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

在任何情况下,通常的方法是向configure 添加一个标志,以打开某个功能。下面configure.acsn -p 添加--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

【讨论】:

  • 感谢您的帮助!目前该项目有两个 Makefile.am。一个在有 configure.ac 的主目录中,另一个在名为 src 的子目录中。当我更新它们时,我一直在执行以下命令来重新制作 makefile。 “automake src/Makefile”和“automake Makefile”。我已经对主目录中的 configure.ac 进行了更改,然后在我的 src/Makefile.am 中使用了条件 if ENABLEGCOV。但是它仍然不起作用。我目前的环境变量定义如下:export USEGCOV = "true"。我做错了什么?
  • 我解决了我的问题,但您的解决方案是正确的!谢谢!我意识到您还必须在修改 configure.ac 文件后执行“autoconf”来更新它。我也不需要命令中的“x”。因此,例如,我刚刚使用了 "AM_CONDITIONAL([ENABLEGCOV],[test "${USE_GCOV}" = "true"]) 并设置了以下环境变量:"export USE_GCOV="true""。
  • test "x${FOO}" 成语主要是为了防止空的 FOO;虽然它可能适用于FOO=yes,但如果您不关心设置 FOO,它可能会失败。
  • 为什么不在任何地方添加“-lgcov”? “-fprofile-arcs -ftest-coverage”够吗?
  • @Arkady 因为这不是 OP 所问的:问题是关于如何有条件地添加一些标志;这些标志的实际性质与问题无关。
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 2019-08-16
  • 2019-07-31
  • 2012-01-26
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多