来自* *源文件

时间:2017-05-29 21:09:26

标签: makefile gnu-make

我有这个制定规则:

dist/node/%.js: src/%.node.js yarn.lock .babelrc | $(NODE_DIST_DIRS)
    $(BIN)/babel $< -o $@

当我的源文件以.node.js结尾时,它可以正常工作。如,

$ make dist/node/fs.js
mkdir -p dist/node/
node_modules/.bin/babel src/fs.node.js -o dist/node/fs.js

但是,我想从 dist/node/fs.jssrc/fs.node.js编译src/fs.js,无论哪个存在。

原因是我有一些共享文件只有.js扩展名(在浏览器和节点中都有效),然后是更具体的.node.js扩展名文件。如果有更具体的版本,我想使用它。

我不知道如何与%结合使用条件依赖项。这可能吗?我可以优先考虑依赖关系并采取最佳匹配吗?

2 个答案:

答案 0 :(得分:1)

我想您可以尝试使用double-colon rule,但这些不能是模式规则。

作为替代方案,请考虑generating and including a makefile containing just those dependencies

答案 1 :(得分:1)

单一规则无法做到这一点。您必须编写两个具有不同先决条件的规则,否则相同:

dist/node/%.js: src/%.node.js yarn.lock .babelrc | $(NODE_DIST_DIRS)
        $(BIN)/babel $< -o $@

dist/node/%.js: src/%.js yarn.lock .babelrc | $(NODE_DIST_DIRS)
        $(BIN)/babel $< -o $@