繁体   English   中英

在此范围内未声明在makefile中添加c ++ 11以消除错误to_string

[英]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 CPPFLAGSCXXFLAGS之间的区别是[ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM