如何通过启用 autoconf 中的功能来设置编译器标志

how to set a compiler flag by enabling a feature in autoconf

我是 Autoconf 的新手,我想要一个配置文件,当我调用时:configure --enable-gtest=yes,以便它添加一个编译器标志。我在搜索后提出的以下代码如下所示,但没有达到目的。

非常感谢

这就是我的 makefile 的样子。

-include Makefile.config

SRC = $(wildcard *.cpp)
OBJ = $(SRC:.cpp=.o)

install: $(OBJ)
    $(CC) $(CXXFLAGS) $(DEBUGFLAG) $(OBJ) -o run

%.o:%.cpp
    $(CC) $(CXXFLAGS) $(DEBUGFLAG) -c $<

clean:
    rm -f *.o

这是我的configure.ac

AC_INIT([test], [1.7.0])

AC_PREREQ([2.59])

AC_CONFIG_MACRO_DIR([m4])

AC_CHECK_PROGS(CXX, [g++ c++ clang], ":")
AC_PROG_CXX
AC_SUBST(CXX)

AC_ARG_ENABLE([debug],
[  --enable-debug    Turn on debugging],
[case "${enableval}" in
  yes) debug=true ;;
  no)  debug=false ;;
  *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],[debug=false])
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])


AC_CONFIG_FILES(Makefile.config)
AC_OUTPUT

和我的

Makefile.config.in

CC = @CXX@
CXXFLAGS = -std=c++14 

if DEBUG
DBG = debug
else
DBG =
endif

谢谢

非常接近!但不完全是。

您可能最好使用 Automake,它会自动为您完成很多 Makefile 的苦差事。但是如果你真的想避免它,那么你必须根据你在configure.ac.

中所写的内容正确地编写你的Makefile
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])

这定义了几个 autoconf 替换,如 DEBUG_TRUEDEBUG_FALSE。您选择的 if 形式仅适用于 Automake,在普通的 Makefile 中,您必须编写如下内容:

@DEBUG_TRUE@...stuff when
@DEBUG_TRUE@...true

或者,您可以使用 GNU make 的 if 语句测试替换值。

另一种方法是根本不使用 AM_CONDITIONAL,而是 AC_SUBST 你想在 Makefile.config.in.

中使用的东西