我可以在makefile的子文件夹中执行命令吗?

时间:2012-02-27 11:33:09

标签: c makefile

我的项目文件夹看起来像这样

Makefile
/src
  /flash
    build.xml
  /blabla
    ...

我写了一个像这样的Makefile

flash: src/flash/bin-debug/App.swf

src/flash/bin-debug/App.swf:
    cd src/flash
    ant

当我执行make flash时,收到以下消息:

cd src/flash/
ant
Buildfile: build.xml does not exist!
Build failed
make: *** [src/flash/bin-debug/App.swf] Error 1

如何在ant

中执行src/flash

2 个答案:

答案 0 :(得分:4)

make creates a new subshell for each line。尝试:

src/flash/bin-debug/App.swf:
    cd src/flash; ant

否则这两个命令在两个单独的子shell中执行。当第一个子shell终止时,cd的效果会丢失。

答案 1 :(得分:1)

正如aix所解释的那样,你必须在一行上写cd src/flash; ant

由于您尚未为App.swf目标指定任何依赖项,因此make在更改时无法重建。你可以添加它们。问题是你不想复制你正在用ant做的工作。

使用GNU Make解决方案是使用phony target。它是一种目标类型,不会被解释为文件名,并且每次构建目标时都会执行其命令。

这看起来像这样:

.PHONY: flash

flash:
    cd src/flash; ant

重复输入make flash每次都会调用ant。