如何通过启用autoconf

时间:2017-03-05 23:05:02

标签: autoconf automake

我是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

感谢

1 个答案:

答案 0 :(得分:1)

非常接近!但不完全。

你可能最好使用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中想要使用的内容。