我正在尝试使用makefile来运行不同的程序,每个程序都位于makefile的子目录中。
当我键入make program1
时,应该运行Ruby程序(位于目录'program1'中)。当我输入make program2
(位于'program2'目录中)时,Python程序将运行。
这是MAKEFILE:
.PHONY: program1 program2
HOST=localhost
DATABASE=student
USER=root
export HOST DATABASE USER PASSWORD
program1:
ruby program1/program1.rb $(HOST) $(DATABASE) $(USER) $(PASSWORD)
program2:
...
问题在于,当我尝试运行program1时,输出为:
make: Nothing to be done for 'program1'.
答案 0 :(得分:0)
这真的不是最适合的任务。
如果您想使用make进行此类运行任务'您想要的活动,例如GNU制作手册在Empty Target Files to Record Events部分讨论的内容。
4.8空目标文件以记录事件
空目标是伪目标的变体;它用于保存您不时明确请求的操作的配方。与虚假目标不同,此目标文件确实存在;但文件的内容无关紧要,通常都是空的。
空目标文件的目的是记录上次修改时间,上次执行规则的配方时。这样做是因为配方中的一个命令是用于更新目标文件的触摸命令。
空目标文件应该有一些先决条件(否则没有意义)。当您要求重新制作空目标时,如果任何先决条件比目标更新,则执行配方;换句话说,如果自上次重新生成目标以来先决条件已更改。这是一个例子:
print: foo.c bar.c lpr -p $? touch print
使用此规则,如果源文件自上次'make print'以来已更改,'make print'将执行lpr命令。自动变量'$?'用于仅打印已更改的文件(请参阅自动变量)。
但是,由于您的任务不受任何其他(必备)文件更改的严格控制,您可能希望使用Phony Target。
你的错误"是你正在使用一个名称与目录中的目录相同的目标,因此make看到该目录和一个规则没有给出任何理由需要重建它(没有先决条件),所以make that that它没有"无所事事"。