gpt4 book ai didi

c++ - 无法使 automake 使用 C++11

转载 作者:太空狗 更新时间:2023-10-29 23:01:14 26 4
gpt4 key购买 nike

我正在做一些项目,似乎我无法制作使用 C++11 的 automake 脚本。

在我的项目的 rootdir 中,我有文件 Makefile.am,它看起来像这样(它是由 eclipse 自动生成的):

SUBDIRS=src

然后在/rootdir/src 中我有 Makefile.am 看起来像这样:

AM_CXXFLAGS=-Wall -fPIC -std=gnu++11 -DVERSION=\"$(VERSION)\" -DPROG="\"$(PACKAGE)\""

bin_PROGRAMS = algatorc
algatorc_SOURCES = algatorc.cpp
include_HEADERS = Timer.hpp TestSetIterator.hpp TestCase.hpp ETestSet.hpp EParameter.hpp Entity.hpp ParameterSet.hpp AbsAlgorithm.hpp Log.hpp JSON.hpp JSONValue.hpp

lib_LIBRARIES = libAlgatorc.a
libAlgatorc_a_SOURCES = ParameterSet.cpp TestCase.cpp EParameter.cpp ETestSet.cpp TestSetIterator.cpp Entity.cpp Timer.cpp JSON.cpp JSONValue.cpp AbsAlgorithm.cpp
algatorc_LDADD=libAlgatorc.a

因此,我添加了 -std=gnu++11 以支持 C++11,但我仍然收到此错误:

g++ -DPACKAGE_NAME=\"algatorc\" -DPACKAGE_TARNAME=\"algatorc\" -DPACKAGE_VERSION=\"1.0\" -DPACKAGE_STRING=\"algatorc\ 1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"algatorc\" -DVERSION=\"1.0\" -I.     -g -O2 -MT algatorc.o -MD -MP -MF .deps/algatorc.Tpo -c -o algatorc.o algatorc.cpp
In file included from /usr/include/c++/4.8/thread:35:0,
from Log.hpp:281,
from algatorc.cpp:18:
/usr/include/c++/4.8/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^

从这个错误中我可以看出 g++ 没有使用 -Wall -fPIC -std=gnu++11 但我不明白为什么。它使用的是完全不同的东西。这是我的 configure.ac 脚本,它位于我项目的 rootdir 中

AC_PREREQ([2.69])
AC_INIT([algatorc], [0.1], [my_mail])
AC_CONFIG_SRCDIR([src/TestCase.hpp])
#AC_CONFIG_HEADERS([config.h])

LT_INIT
AM_INIT_AUTOMAKE

# Checks for programs.

AC_PROG_CXX

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h string.h sys/time.h unistd.h wchar.h wctype.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T

# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_MKTIME
AC_CHECK_FUNCS([gettimeofday memset mkdir])

LIBS=-ldl

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

我也曾尝试将 AX_CXX_COMPILE_STDCXX_11 添加到 configure.ac 脚本,但错误仍然存​​在。知道如何解决这个问题吗?

我使用的是 Ubuntu 12.04 x64 和 Eclipse(版本:Mars Release (4.5.0))

最佳答案

快速测试表明一切正常,配置相似,因此您只需卷起袖子查看您的最终 Makefile 即可弄清楚您的 Makefile 发生了什么。 .

查看 automake-d Makefile 内部.您应该在其中的某处找到 .cpp.o 的最终构建规则。搜索“.cpp.o”。它应该看起来像这样:

.cpp.o:
$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po

验证完之后,下一步就是看你的CXXCOMPILE是什么了宏被定义为。它应该看起来像这样:

CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)

那是你的 AM_CXXFLAGS正在使用的变量。最后,确认它在实际中是如何定义的 Makefile .

在我的例子中,对于我的简单测试,它很简单:

AM_CXXFLAGS = -std=gnu++11

在我的例子中,只是在你的例子中,显然你会有你的其他标志。

就是这样。 automake-d 的 Makefile 显然很大,看起来很吓人,但当你深入研究它时,它一点也不复杂。

这将是两件事之一。 Makefile.am 的另一部分破坏了 AM_CXXFLAGS 的值,或 CXXCOMPILE宏被破坏了。关于 automake 的一件事是,如果重新定义宏或变量,它通常不会提示。它只会生成最终的 Makefile使用变量的最终值。所以,我猜稍后在你的 Makefile.am 中,你设置了 AM_CXXFLAGS到别的东西,而在这里没有意识到它。

注意:实际的宏经常会随着 automake 的每个后续版本而调整。 ,所以你的可能看起来略有不同,但总体思路应该是一样的。 .cpp.o构建规则运行 CXXCOMPILE宏,它使用 AM_CXXFLAGS .

关于c++ - 无法使 automake 使用 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31632684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com