使用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.h

main 函数显然在 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

然后点击ma​​ke 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

这会起作用,请注意这里&lt;TAB&gt;是我们需要插入的制表符。

只需发出编译即可

make

或者对于简单的情况,make 提供了一个默认规则的捷径。你可以编译我们的代码without using Makefile

CXXFLAGS=-std=c+=11 -Wall -pedantic -pthread make main

但是这种方法会将程序名称命名为文件名,即这里的 main,而不是您想要的 prog

【讨论】:

以上是关于使用makefile以简单的方式编译c ++ 11程序的主要内容,如果未能解决你的问题,请参考以下文章

makefile 学习记录简单的两个C文件编译

makefile 学习记录简单的两个C文件编译

makefile 学习记录简单的两个C文件编译

修改 makefile 以包含外部编译的对象

Makefile的简单编写

用于在头文件更改时构建简单 c 项目重新编译的示例 makefile