我是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
感谢
答案 0 :(得分:1)
非常接近!但不完全。
你可能最好使用Automake,它会为你自动化很多Makefile苦差事。但如果你真的想避免它,那么你必须根据你在configure.ac
中写的内容正确编写你的Makefile。
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
这定义了一些autoconf替换,例如DEBUG_TRUE
和DEBUG_FALSE
。您选择的if
表单仅适用于Automake,在普通的Makefile中,您必须编写如下内容:
@DEBUG_TRUE@...stuff when
@DEBUG_TRUE@...true
或者,您可以使用GNU make的if
语句测试替换值。
另一种方法是根本不使用AM_CONDITIONAL
,而是使用AC_SUBST
Makefile.config.in
中想要使用的内容。