【问题标题】:specifying the filename in a makefile在 makefile 中指定文件名
【发布时间】:2018-08-02 22:41:25
【问题描述】:

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

make -f mymakefile testfile

makefile 会找到 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

我试过让它 echo 'testfile' 更好地理解自动变量的工作原理,但我也无法让它正常工作。

【问题讨论】:

  • $< 是传入的源文件名。 $@ 是输出文件名。如果您有一个源文件,则配方可能会像$(CXX) $(CXXFLAGS) -o $@ $< 一样精心制作。此外,$(CC) 使用 $(CFLAGS)$(CXX) 使用 $(CXXFLAGS)

标签: linux gnu-make makefile


【解决方案1】:

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

如果你真的想为一个变量传递一个值,命令应该是:

NAME=testfile make -f mymakefile 

【讨论】:

  • 您可能想要覆盖 Makefile 中的 NAME,而不是通过环境传递:make -f mymakefile NAME=testfile
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多