Makefile目标依赖于环境变量中的文件

Makefile目标依赖于环境变量中的文件,makefile,dependencies,environment-variables,target,Makefile,Dependencies,Environment Variables,Target,如果我像这样运行make: make VAR=dir 有没有办法将VAR变量所指向的位置添加为目标依赖项?实际上,我需要在该目录中定义一个文件作为依赖项 我同意: target: $(VAR)/file.txt echo yes 但是如果没有定义变量,目标将理解/file.txt,这不是我想要的。我还考虑创建一个虚假目标来检查变量,使用test,但是每次都会执行虚假目标,因此,target也会执行 有什么解决方案吗?如果没有定义变量,您还没有说想要什么行为,但这可能就是您想要的: ifd

如果我像这样运行
make

make VAR=dir
有没有办法将VAR变量所指向的位置添加为目标依赖项?实际上,我需要在该目录中定义一个文件作为依赖项

我同意:

target: $(VAR)/file.txt
  echo yes
但是如果没有定义变量,目标将理解
/file.txt
,这不是我想要的。我还考虑创建一个虚假目标来检查变量,使用
test
,但是每次都会执行虚假目标,因此,
target
也会执行


有什么解决方案吗?

如果没有定义变量,您还没有说想要什么行为,但这可能就是您想要的:

ifdef VAR
target: $(VAR)/file.txt
endif

target:
  echo yes
  @echo and here are the dependencies: $^

谢谢,这正是我需要的。实际上,我会用
else
子句来括起最后一个目标,这样make就不会抱怨重新定义了目标。make不会抱怨,如果你把第二部分放在
else
子句中,这个技巧也不会起作用。试试看。