C++ 编译c++;11使用makefile编写简单的程序

C++ 编译c++;11使用makefile编写简单的程序,c++,linux,compilation,makefile,C++,Linux,Compilation,Makefile,获得了用c++11编写简单程序的任务,该程序包含以下文件: main.cpp 豪斯h酒店 树 main函数显然位于main.cpp文件中。 main.cpp包含两个头文件并使用它们 当我尝试在Linux上编译时,我写道: g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp -o prog 我得到了一个可以运行的prog文件 然后我尝试使用makefile编译它,我做的是: all: g++ -std=c++11 -O2 -Wal

获得了用c++11编写简单程序的任务,该程序包含以下文件:

  • main.cpp
  • 豪斯h酒店
main函数显然位于main.cpp文件中。 main.cpp包含两个头文件并使用它们

当我尝试在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
然后点击“全部制作”

遗憾的是,它不起作用。 试图在网上搜索如何正确操作,但运气不佳。 你能告诉我怎么做吗

还有,如何进行智能编译?i、 e.仅当上述文件发生更改时才进行编译


谢谢

Makefile

all:
<TAB>g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp -o prog
或者对于简单的情况,
make
提供了一条使用默认规则的捷径。您可以编译我们的代码
,而无需使用Makefile

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

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

创建一个
Makefile
,只包含以下几行,并检查它:

CFLAGS += -g -O2 -Wall -W -pedantic
CXXFLAGS=$(CFLAGS) -std=c++11
CFLAGS += -pthread
LDFLAGS += -pthread
然后键入
makemain
。Make将搜索其内置规则,并发现有一种方法可以从
main.cpp
获取名为
main
的编译程序。然后,它将执行一个内置规则,类似于:

$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
如果只想键入
make
,则可以添加:

all: main

当您键入
make

时,内置的隐式规则将为您构建
main
“很遗憾,它不起作用”这是什么意思?不编译?有错误吗?第二个字符串必须以tablation开头确保
g++
缩进了
制表符而不是空格。“如何进行智能编译?”-阅读make文档此问答不适合提供教程,并且
make
需要一些时间和精力来学习。但是如果你想成为一名程序员,这是非常必要的。
all: main