[英]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.