如何从终端覆盖makefile中的变量

如何从终端覆盖makefile中的变量,makefile,gnu-make,multiple-makefiles,Makefile,Gnu Make,Multiple Makefiles,我创建了一个简单的makefile,即 COMMON=hello all: gcc $(COMMON).c -o $(COMMON).o 我运行makefile的目录包含三个文件:hello.c add.c multiply.c factorial.c和subtraction.c 当我在终端中使用make命令编译此代码时,会打印hello。现在我想在程序中进行更改,这样当我编写“makeadd”或“makemultiply”或“makefactorial”时,相应的程序将被编译。只需在命令

我创建了一个简单的makefile,即

COMMON=hello
all:
  gcc $(COMMON).c -o $(COMMON).o
我运行makefile的目录包含三个文件:hello.c add.c multiply.c factorial.c和subtraction.c


当我在终端中使用
make
命令编译此代码时,会打印hello。现在我想在程序中进行更改,这样当我编写“makeadd”或“makemultiply”或“makefactorial”时,相应的程序将被编译。

只需在命令行中提供它

make COMMON=bye
如果可以从当前目录中的文件名预测目标,那么实际上根本不需要Makefile,因为Make已经知道如何从
multiply.c
中进行
乘法

.PHONY: all
all: hello add multiply factorial
如果你真的想要一个明确的食谱,试试这样的方法

%: %.c
        gcc -o $@ $^

只需在命令行中提供它

make COMMON=bye
如果可以从当前目录中的文件名预测目标,那么实际上根本不需要Makefile,因为Make已经知道如何从
multiply.c
中进行
乘法

.PHONY: all
all: hello add multiply factorial
如果你真的想要一个明确的食谱,试试这样的方法

%: %.c
        gcc -o $@ $^

这件事我已经知道了……但是如果用户不知道文件中有“COMMON”……用户只想用“make”来编译程序……这件事我已经知道了……但是如果用户不知道文件中有“COMMON”……用户只想用“make”来编译程序。。。。