簡體   English   中英

Makefile修改以支持c ++ 11

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

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