使用makefile以简单的方式编译c ++ 11程序
Posted
技术标签:
【中文标题】使用makefile以简单的方式编译c ++ 11程序【英文标题】:compiling c++ 11 program the simple way using makefile 【发布时间】:2016-03-30 14:54:49 【问题描述】:得到一个任务,用 c++11 编写一个简单的程序,其中包含以下文件:
main.cpp house.h tree.hmain 函数显然在 main.cpp 文件中。 main.cpp 包含 2 个头文件并使用它们。
当我尝试在 Linux 上编译时,我写道:
g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp -o prog
我得到了一个可以运行的 prog 文件。
然后我尝试使用makefile编译它,我所做的是:
all:
g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp -o prog
然后点击make all
很遗憾,它不起作用。 试图在网上搜索如何正确地做到这一点,没有运气。 你能告诉我需要怎么做吗?
还有,如何进行智能编译?即仅在上述文件更改时编译。
谢谢!
【问题讨论】:
“很遗憾它不起作用”是什么意思?不编译?有一些错误信息吗?第二个字符串必须以制表符开头 确保g++
缩进为TAB
而不是空格。
"如何进行智能编译?" - 阅读 make 文档 本 Q&A 不适合提供教程,make
需要一些时间和精力来学习。但如果你要成为一名程序员,恕我直言,这是非常重要的。
【参考方案1】:
只用以下几行创建一个Makefile
并检查一下:
CFLAGS += -g -O2 -Wall -W -pedantic
CXXFLAGS=$(CFLAGS) -std=c++11
CFLAGS += -pthread
LDFLAGS += -pthread
然后输入make main
。 Make 将搜索其内置规则并发现有一种方法可以从main.cpp
获取一个名为main
的编译程序。然后它将执行一个看起来像这样的内置规则:
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
如果您只想输入make
,则可以添加:
all: main
当您键入make
时,内置的隐式规则将为您构建main
。
【讨论】:
【参考方案2】:在Makefile
all:
<TAB>g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp -o prog
这会起作用,请注意这里<TAB>
是我们需要插入的制表符。
只需发出编译即可
make
或者对于简单的情况,make
提供了一个默认规则的捷径。你可以编译我们的代码without using Makefile
。
CXXFLAGS=-std=c+=11 -Wall -pedantic -pthread make main
但是这种方法会将程序名称命名为文件名,即这里的 main,而不是您想要的 prog
【讨论】:
以上是关于使用makefile以简单的方式编译c ++ 11程序的主要内容,如果未能解决你的问题,请参考以下文章