[英]adding c++11 in makefile to remove the error to_string is not declared in this scope
我想这个问题是在其他一些线程中提出的,调用make时出现错误:在此范围内未声明to_string。 我发现我必须在makefile中添加c ++ 11。 但是我尝试了几个线程中提到的一些选项。 您能在这里提供一些解决方案吗? 谢谢
在CFLAGS
添加-std=c++11
将导致g++
符合C ++ 11标准。 像这样
CFLAGS=-std=c++11 -c -g -O3 -finline-functions -fstack-protector
但是,正如注释中突出显示的那样,使用makefile
编译C ++程序的适当语法是使用这样的规则
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
您的C ++文件使用后缀.cc
[ 1 ]。 然后您将-std=c++11
添加到CXXFLAGS
。 CPPFLAGS
和CXXFLAGS
之间的区别是[ 2 ]
CPPFLAGS应该用于C P re - proc的标志。 CXXFLAGS用于C ++编译器的标志。
这将需要在makefile
进行一些重写,即
CXX=g++
LD=g++
CXXFLAGS=-c -g -O3 -fstack-protector -I./Eigen
和规则
$(CC) $(INCLUDE) $(CFLAGS) -c
至
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
如上。
$(INCLUDE)
也可以从链接命令( $(LD)
)中删除,因为仅在编译时才需要。 您的链接命令也可以简化为
ParEGOIteration13: ParEGOIteration13.o Utilities.o WeightVector.o SearchSpace.o DACE.o GeneticAlgorithm.o Matrix.o
$(CXX) $? -o $@
通过使用自动变量[ 3 ]
$?
扩展到所有先决条件 $@
扩展为目标名称 我将让您了解如何在编译规则中使用自动变量。
注意:我已经删除了-finline-functions
因为-O3
(和-O2
)默认使用gcc将其打开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.