【发布时间】:2016-06-05 05:44:46
【问题描述】:
我通常不会因为这样的问题打扰人们,但我一直在毫无结果地谷歌搜索没有结果。 我正在通过 cygwin 将 symengine 安装到我的计算机上,并且说明告诉您执行“cmake”。然后'制作'
/cygdrive/c/SDPB/sym/symengine/symengine_rcp.h:294:32: warning: variadic templates only available with -std=c++11 or -std=gnu++11
template<typename T_, typename ...Args>
^
/cygdrive/c/SDPB/sym/symengine/symengine_rcp.h:295:37: error: expected ‘,’ or ‘...’ before ‘&&’ token
friend inline RCP<T_> make_rcp( Args&& ...args );
^
/cygdrive/c/SDPB/sym/symengine/symengine_rcp.h:295:48: error: parameter packs not expanded with ‘...’:
friend inline RCP<T_> make_rcp( Args&& ...args );
我意识到这可能是一个非常具体的错误,而不是一个常见问题,但我想知道如何在这种情况下通过 make 启用 c++11 或 gnu++11? 提前谢谢!
【问题讨论】:
-
我很确定这不是缺少 c++11 标志,因为它在他们自己的文件中使用,因此 cmake 应该将正确的编译器标志放在 Makefile 中。就像你写
g++ -o output.o -c source.c一样,如果你想要c++11,你会写g++ -std=c++11 -o output.o -c source.c。这必须写在 Makefile 中,不能作为命令参数传递。 -
这是有道理的,但是我不知道我必须去哪里编辑它。在 Makefile 中没有任何地方说 g++。我唯一能想到的地方是
# target to build an object file symengine_rcp.o: $(MAKE) -f CMakeFiles/symengine.dir/build.make CMakeFiles/symengine.dir/symengine_rcp.o .PHONY : symengine_rcp.o,当我转到 build.make 文件时,同样的问题仍在继续,我不知道该去哪里了。感谢您抽出宝贵时间回复! -
一般在高级 Makefile 中,都是在变量中定义命令名和目录/文件,所以如果需要更改编译器/目录/文件,只需更改一次。对于编译器,变量名通常是
CC或CXX。但是,cmake文件生成了主makefile调用的子makefile(根据我对您给出的行的理解,这似乎是正确的)。对于 c++11 标志,也有一个变量:对于 C,它是CFLAGS,对于 C++,它是CXXFLAGS。如果它被定义,它应该在那里。
标签: c++11 gcc makefile cygwin variadic-templates