簡體   English   中英

使用Makefile和C ++ 11編譯時出錯

[英]Error while compiling with a makefile and c++11

我目前有一個C ++項目有問題。 我需要C ++ 11隨附的一些工具,但是當我要使用Makefile進行編譯時,出現錯誤:

錯誤此文件需要ISO C ++ 2011標准的編譯器和庫支持。 該支持目前處於試驗階段,必須使用-std = c ++ 11或-std = gnu ++ 11編譯器選項啟用。

這是我的Makefile:

.PHONY: clean, mrproper

# var
CXX = g++
EXEC = tablut
LDFLAGS = 
CXXFLAGS = -std=c++11 -Wall -Wextra 
SRC= partie.cpp pawn.cpp playground.cpp
OBJ= $(SRC:.c=.o)

# commands
    all: $(EXEC)

tablut: $(OBJ)
    $(CXX) -o tablut $(OBJ) $(LDFLAGS)

%.o: %.cpp
    $(CXX) -o $@ -c $< $(CXXFLAGS) 

clean:
    rm -rf *.o

mrproper: clean
    rm -rf tablut

有趣的是,如果我輸入命令g ++ -c std = c ++ 11,我的代碼就會編譯。

我做錯了什么 ?

注意:我嘗試使用標志-std = c ++ 11,-std = c ++ 0x和-std = gnu ++ 11

您有規則:

OBJ= $(SRC:.c=.o)

這意味着$(OBJ)最終為:

OBJ= partie.cpp pawn.cpp playground.cpp

因為它們都不匹配.c 您可能想寫:

OBJ= $(SRC:.cpp=.o)

使用該修復程序,運行make會產生:

$ make
g++ -o partie.o -c partie.cpp -std=c++11 -Wall -Wextra 
g++ -o pawn.o -c pawn.cpp -std=c++11 -Wall -Wextra 
g++ -o playground.o -c playground.cpp -std=c++11 -Wall -Wextra 
g++ -o tablut partie.o pawn.o playground.o 

這可能是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM