没有为'program1'做任何事情。尝试使用MAKEFILE打开Ruby程序

时间:2014-11-13 23:39:49

标签: makefile

我正在尝试使用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'.

1 个答案:

答案 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它没有"无所事事"。