簡體   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