使用makefile以简单的方式编译c ++ 11程序

时间:2016-03-30 14:54:49

标签: c++ linux compilation makefile

在c ++ 11中编写了一个包含以下文件的简单程序:

  • 的main.cpp
  • house.h
  • tree.h中

主要功能显然在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

可悲的是它不起作用。 试图在网上搜索如何正确地做到这一点,没有运气。 你能告诉我怎么做吗?

,如何进行智能编译?即仅在上述文件被更改时才编译。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

但是这种方法会将程序名称命名为文件名,即主要名称,而不是prog,如你所愿

答案 1 :(得分:0)

使用以下行创建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

当您输入main时,内置的隐式规则将为您构建make