我第一次尝试使用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"
答案 0 :(得分:1)
是的。你做了一个“假”目标,这取决于其他程序
all_programs : series gn
答案 1 :(得分:1)
默认情况下,当您运行make
时,make会运行它看到的第一个目标的规则。在您的情况下,这将是series
目标。
例如,您可以通过在命令行make gn
或make gn series
上指定它们来手动运行所需的任何其他目标。
如果你想让make默认构建超过第一个目标,你可以给它一个第一个做你想要的目标。
此目标的通用名称为all
。因此,您需要在当前目标条目之前添加all: series gn
。
您可能还希望将该目标标记为.PHONY: all
,以便在运行all
时创建的某个make all
文件仍然可以按预期方式工作(而不是尝试根据先决条件检查all
文件的修改时间等。)。