【问题标题】:Enabeling C++ 11 support in my makefile using CXXFLAGS使用 CXXFLAGS 在我的 makefile 中启用 C++ 11 支持
【发布时间】:2018-05-27 19:16:34
【问题描述】:

我正在尝试在我学校的服务器上编译我的程序,但需要启用 C++ 11 才能编译我的程序。我不确定我是否如何实现从终端编译时使用的 g++ -std=c++11 *.cpp *.h -o programName。

这是我的makefile:

all, Project4, Project4.exe: Character.o Barbarian.o BlueMen.o Vampire.o 
Medusa.o HarryPotter.o LinkedList.o Queue.o Stack.o main.o
g++ main.o Character.o Barbarian.o BlueMen.o Vampire.o Medusa.o 
HarryPotter.o LinkedList.o Queue.o Stack.o -o Projec4

Character.o: Character.cpp Character.h
    g++ -c Character.cpp

Barbarian.o: Barbarian.cpp Barbarian.h
    g++ -c Barbarian.cpp

BlueMen.o: BlueMen.cpp BlueMen.h
    g++ -c BlueMen.cpp

Vampire.o: Vampire.cpp Vampire.h
    g++ -c Vampire.cpp

Medusa.o: Medusa.cpp Medusa.h
    g++ -c Medusa.cpp

HarryPotter.o: HarryPotter.cpp HarryPotter.h
    g++ -c HarryPotter.cpp

LinkedList.o: LinkedList.cpp LinkedList.h
    g++ -c LinkedList.cpp

Queue.o: Queue.cpp Queue.h
    g++ -c Queue.cpp

Stack.o: Stack.cpp Stack.h
    g++ -c Stack.cpp

main.o: main.cpp Character.h Barbarian.h BlueMen.h Vampire.h Medusa.h 
HarryPotter.h LinkedList.h Queue.h Stack.h
    g++ -c main.cpp

clean:
    -rm *.o

【问题讨论】:

标签: c++ c++11 makefile compilation


【解决方案1】:

只需在makefile规则中添加必要的编译参数即可:

all, Project4, Project4.exe: Character.o Barbarian.o BlueMen.o Vampire.o 
Medusa.o HarryPotter.o LinkedList.o Queue.o Stack.o main.o
g++ main.o Character.o Barbarian.o BlueMen.o Vampire.o Medusa.o 
HarryPotter.o LinkedList.o Queue.o Stack.o -std=c++11 -o Projec4

Character.o: Character.cpp Character.h
    g++ -c -std=c++11 Character.cpp

Barbarian.o: Barbarian.cpp Barbarian.h
    g++ -c -std=c++11 Barbarian.cpp

BlueMen.o: BlueMen.cpp BlueMen.h
    g++ -c -std=c++11 BlueMen.cpp

Vampire.o: Vampire.cpp Vampire.h
    g++ -c -std=c++11 Vampire.cpp

Medusa.o: Medusa.cpp Medusa.h
    g++ -c -std=c++11 Medusa.cpp

HarryPotter.o: HarryPotter.cpp HarryPotter.h
    g++ -c -std=c++11 HarryPotter.cpp

LinkedList.o: LinkedList.cpp LinkedList.h
    g++ -c -std=c++11 LinkedList.cpp

Queue.o: Queue.cpp Queue.h
    g++ -c -std=c++11 Queue.cpp

Stack.o: Stack.cpp Stack.h
    g++ -c -std=c++11 Stack.cpp

main.o: main.cpp Character.h Barbarian.h BlueMen.h Vampire.h Medusa.h 
HarryPotter.h LinkedList.h Queue.h Stack.h
    g++ -c -std=c++11 main.cpp

clean:
    -rm *.o

为了可维护性,您还可以添加一个包含所有必要编译器标志的 makefile 变量:

CXXFLAGS := -std=c++11

all, Project4, Project4.exe: Character.o Barbarian.o BlueMen.o Vampire.o 
Medusa.o HarryPotter.o LinkedList.o Queue.o Stack.o main.o
g++ main.o Character.o Barbarian.o BlueMen.o Vampire.o Medusa.o 
HarryPotter.o LinkedList.o Queue.o Stack.o $(CXXFLAGS) -o Projec4

Character.o: Character.cpp Character.h
    g++ -c $(CXXFLAGS) Character.cpp

Barbarian.o: Barbarian.cpp Barbarian.h
    g++ -c $(CXXFLAGS) Barbarian.cpp

BlueMen.o: BlueMen.cpp BlueMen.h
    g++ -c $(CXXFLAGS) BlueMen.cpp

Vampire.o: Vampire.cpp Vampire.h
    g++ -c $(CXXFLAGS) Vampire.cpp

Medusa.o: Medusa.cpp Medusa.h
    g++ -c $(CXXFLAGS) Medusa.cpp

HarryPotter.o: HarryPotter.cpp HarryPotter.h
    g++ -c $(CXXFLAGS) HarryPotter.cpp

LinkedList.o: LinkedList.cpp LinkedList.h
    g++ -c $(CXXFLAGS) LinkedList.cpp

Queue.o: Queue.cpp Queue.h
    g++ -c $(CXXFLAGS) Queue.cpp

Stack.o: Stack.cpp Stack.h
    g++ -c $(CXXFLAGS) Stack.cpp

main.o: main.cpp Character.h Barbarian.h BlueMen.h Vampire.h Medusa.h 
HarryPotter.h LinkedList.h Queue.h Stack.h
    g++ -c $(CXXFLAGS) main.cpp

clean:
    -rm *.o

可以在此处找到有关自定义 makefile 的更多信息:CFLAGS, CCFLAGS, CXXFLAGS - what exactly do these variables control?

【讨论】:

    猜你喜欢
    • 2012-11-29
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多