[英]Makefile modification to support c++11
我能夠使用帶有-std = c ++ 0x選項的gcc編譯單個文件。 但我不能通過makefile來做到這一點。 以下是我的makefile中的標志集(在抱怨c ++ 11關鍵字之后):
MACHINE = $(shell echo `uname -s`-`uname -m` | sed "s/ //g")
CCC = CC
CCC = g++
CFLAGS = -O3
CFLAGS = -std=c++0x
CFLAGS = -pg -D_DEBUG -g -c -Wall
LFLAGS = -O
LFLAGS = -pg -g
我錯過了什么?
編輯 :我把它更改為以下,但我仍然得到編譯錯誤,我沒有得到命令行gcc調用。
CXXFLAGS=-O3 -std=c++0x -pg -D_DEBUG -g -c -Wall
這樣你的makefile就會使用你所有的CFLAGS
:
CFLAGS=-O3 -std=c++0x -pg -D_DEBUG -g -c -Wall
你用每個“CFLAGS = ...”聲明覆蓋它們。
此外,它應該是CXXFLAGS
,而不是CFLAGS
。 CFLAGS
適用於C應用程序。
正如@Florian Sowade所說,你可以使用CFLAGS += -O3 -std....
(或CXXFLAGS ..),以便用戶在執行make時可以提供自己的標志。
你可以把它保存在多行,但你可能想要追加 ,而不是分配 :
# e.g.
CFLAGS += -O3
CFLAGS += -std=c++0x
CFLAGS += -pg -D_DEBUG -g -c -Wall
你從哪里得到那個爛攤子? 在你為C ++ 11修改它之前很久就認錯了。
讓我們從第一行開始:
MACHINE = $(shell echo `uname -s`-`uname -m` | sed "s/ //g")
嘗試運行命令echo `uname -s`-`uname -m`
,你會看到無論如何都沒有空格,那么sed
命令中的重點是什么?
也許你想要這個:
MACHINE = $(shell uname -s -m | sed "s/ /-/g")
只運行兩個進程(uname和sed)而不是四個(兩個unames,echo和sed)
如果你正在使用GNU make它應該是
MACHINE := $(shell uname -s -m | sed "s/ /-/g")
所以它只運行一次。
CCC = CC
什么是CC
?
CCC = g++
哦,沒關系,你已經取代了這個價值。 C ++編譯器的常規make變量是CXX
CFLAGS = -O3
CFLAGS = -std=c++0x
CFLAGS = -pg -D_DEBUG -g -c -Wall
正如其他人所指出的那樣,你設置CFLAGS,然后將其設置為不同的東西,然后設置為不同的東西。 只保留最后一個值。
LFLAGS = -O
LFLAGS = -pg -g
同樣在這里,什么是LFLAGS
? 你的意思是LDFLAGS
?
調試makefile的一個好方法是創建一個目標來打印出你正在設置的變量,檢查它們是否具有你期望的值:
print-vars:
echo CFLAGS is $(CFLAGS)
echo LDFLAGS is $(LDFLAGS)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.