Makefile 使管理文件位于不同的目录中

Makefile 使管理文件位于不同的目录中,makefile,Makefile,我有一个程序将一个更少的文件编译成CSS文件。我创建了一个通配符make target,它使用适当的参数调用lessc,以在同一目录中创建CSS文件: %.css: %.less node_modules/less/bin/lessc node_modules/less/bin/lessc $< $@ 这很好用。但是,我想采用不同的目录结构: css/ |- foo.less |- foo.css css/ |- foo.css |- less/ |- foo.less

我有一个程序将一个更少的文件编译成CSS文件。我创建了一个通配符make target,它使用适当的参数调用
lessc
,以在同一目录中创建CSS文件:

%.css: %.less node_modules/less/bin/lessc
    node_modules/less/bin/lessc $< $@
这很好用。但是,我想采用不同的目录结构:

css/
|- foo.less
|- foo.css
css/
|- foo.css
|- less/
   |- foo.less

然而,我无法找到一种合理的方法来使用make在不同的目录中管理文件的创建(我特别希望避免不必要的重新编译)。如何更改目标以实现此行为?

您只需要在前提条件中添加所需的前缀。剩下的就交给我吧

%.css: less/%.less node_modules/less/bin/lessc
        node_modules/less/bin/lessc $< $@
%.css:less/%.less节点\u模块/less/bin/lessc
节点_模块/less/bin/lessc$<$@

%.css:less/%.less…
如果我想编译foo/bar.css怎么办?它将查找less/foo/bar.css,而它应该查找foo/less/bar.css。你确定吗?模式规则通常不是这样匹配的。那
%.css:less/%.less
应该映射到
foo/bar.css
foo/less/bar.css,我相信。(这似乎适用于快速测试。)具体参见第二段(从“目标模式”开始)。对不起,你说得对。太好了,谢谢!