2015-08-24 99 views
1

我試圖啓用和禁用Linux上的C++ gcov的編譯標誌。我不希望任何時候都設置gcov標誌。我只想在測試軟件時設置它們。我檢查的環境變量稱爲TESTENABLED。Makefile.am/Configure.ac有條件的環境變量檢查

在我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文件都沒有生成。有沒有人看到我在做什麼錯了?

+0

如果有人有話要說,他們會這樣做;即使沒有你提醒他們(這不是郵件列表) –

回答

1

您是否將環境變量設置爲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 
+0

感謝您的幫助!目前該項目有兩個Makefile.am。一個是在有configure.ac的主目錄下,另一個在名爲src的子目錄下。當我更新它們時,我一直在執行以下命令來重新生成makefile。 「automake src/Makefile」和「automake Makefile」。我已經對主目錄下的configure.ac進行了更改,然後在src/Makefile.am中使用了條件表達式ENABLEGCOV。但它仍然不起作用。我目前有我的環境變量定義如下:export USEGCOV =「true」。我究竟做錯了什麼? – supraMan

+0

我解決了我的問題,但您的解決方案是正確的!謝謝!我意識到,在修改它之後,您還必須執行「autoconf」來更新configure.ac文件。我也不需要命令中的「x」。因此,例如我剛剛使用「AM_CONDITIONAL([ENABLEGCOV],[test」$ {USE_GCOV}「=」true「]),其環境變量設置如下:」export USE_GCOV =「true」「。 – supraMan

+0

'test」 x $ {FOO}「成語主要是爲了防止空的FOO;而它可能與'FOO = yes'一起工作,如果你不關心設置* FOO *,它可能會失敗。 –