使用make编译多个C ++文件

时间:2014-11-11 14:09:46

标签: c++ makefile

我第一次尝试使用Makefile。是否可以使用一个Makefile将2个不同的c ++程序编译成2个可执行文件?

这是我到目前为止所做的,但它只会编译第一个。

CFLAGS=-O3 -Wall

series : ./problem1/series.cpp
    g++ $(CFLAGS) -o series ./problem1/series.cpp

gn : ./problem1/gn.cpp
    g++ $(CFLAGS) -o gn ./problem1/gn.cpp

编辑:

我怎样才能阻止它每次编译(除非我修改代码)?

CFLAGS=-O3 -Wall

all : q1_series q1_gn q1_series_new_initial

q1_series : ./problem1/series.cpp
    g++ $(CFLAGS) -o ./executables/q1_series ./problem1/series.cpp

q1_gn : ./problem1/gn.cpp
    g++ $(CFLAGS) -o ./executables/q1_gn ./problem1/gn.cpp

q1_series_new_initial : ./problem1/series1.cpp
    g++ $(CFLAGS) -o ./executables/q1_series_new_initial ./problem1/series1.cpp

    echo "Question 1 created in ./executables"

2 个答案:

答案 0 :(得分:1)

是的。你做了一个“假”目标,这取决于其他程序

all_programs : series gn 

答案 1 :(得分:1)

默认情况下,当您运行make时,make会运行它看到的第一个目标的规则。在您的情况下,这将是series目标。

例如,您可以通过在命令行make gnmake gn series上指定它们来手动运行所需的任何其他目标。

如果你想让make默认构建超过第一个目标,你可以给它一个第一个做你想要的目标。

此目标的通用名称为all。因此,您需要在当前目标条目之前添加all: series gn

您可能还希望将该目标标记为.PHONY: all,以便在运行all时创建的某个make all文件仍然可以按预期方式工作(而不是尝试根据先决条件检查all文件的修改时间等。)。