Linux 在makefile中指定文件名

Linux 在makefile中指定文件名,linux,gnu-make,makefile-errors,Linux,Gnu Make,Makefile Errors,我是新手,正在尝试创建一个makefile,在其中我可以运行,例如: make -f mymakefile testfile 生成文件将找到testfile.java(存在于我运行的目录中),编译它,然后运行代码 相反,我必须对自动变量是如何工作的感到困惑,在工作了一下午之后,我仍然得到了错误: make: Nothing to be done for `testfile'. 任何帮助都将不胜感激,我的代码如下: JC=javac JVM=java JFLAGS= -g RM = rm -f

我是新手,正在尝试创建一个makefile,在其中我可以运行,例如:

make -f mymakefile testfile
生成文件将找到testfile.java(存在于我运行的目录中),编译它,然后运行代码

相反,我必须对自动变量是如何工作的感到困惑,在工作了一下午之后,我仍然得到了错误:

make: Nothing to be done for `testfile'.
任何帮助都将不胜感激,我的代码如下:

JC=javac
JVM=java
JFLAGS= -g
RM = rm -f
CFLAGS =
CXX = gcc
NAME = *
.SUFFIXES: .java .class

all: run

NAME: 
        $(CXX) $(CFLAGS) -o $^ $@
        echo $(NAME)

$(NAME).class: $(NAME)
        $(JC) $(JFLAGS) $(NAME).java

run: $(NAME).class
        $(JVM) $(NAME)

.PHONY: clean
clean:
        $(RM) $(NAME).class

我试着让它回显“testfile”,以便更好地理解自动变量是如何工作的,但我也无法让它正常工作

make命令行上的参数选择要生成的目标。您不能像使用shell脚本那样将值传递给变量(就像您尝试使用“NAME”一样)

如果确实要传递变量的值,则命令如下:

NAME=testfile make -f mymakefile 

$您可能希望覆盖Makefile:
make-f mymakefile NAME=testfile
中的
名称,而不是通过环境进行传递。