在c ++ 11中编写了一个包含以下文件的简单程序:
主要功能显然在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
可悲的是它不起作用。 试图在网上搜索如何正确地做到这一点,没有运气。 你能告诉我怎么做吗?
还,如何进行智能编译?即仅在上述文件被更改时才编译。
谢谢!
答案 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
。