如何通过启用 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_TRUE
和 DEBUG_FALSE
。您选择的 if
形式仅适用于 Automake,在普通的 Makefile 中,您必须编写如下内容:
@DEBUG_TRUE@...stuff when
@DEBUG_TRUE@...true
或者,您可以使用 GNU make 的 if
语句测试替换值。
另一种方法是根本不使用 AM_CONDITIONAL
,而是 AC_SUBST
你想在 Makefile.config.in
.
中使用的东西
我是 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
.
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
.