Makefile 当模式不包含配方不明显时进行行为
在以下情况下调用make all时,我会收到错误消息: 没有规则使target`venv/lib/python2.7/site-packages/planar\u growth/node\u degree\u tracker.so 我不明白为什么会这样。我希望目标Makefile 当模式不包含配方不明显时进行行为,makefile,Makefile,在以下情况下调用make all时,我会收到错误消息: 没有规则使target`venv/lib/python2.7/site-packages/planar\u growth/node\u degree\u tracker.so 我不明白为什么会这样。我希望目标$(DST_DIR)/%.so匹配DST_DIR中的所有.so文件,并从SRC_DIR复制它们。为什么没有发生这种情况 SRC_DIR := ./src/spg DST_DIR := ./venv/lib/python2.7/site-
$(DST_DIR)/%.so
匹配DST_DIR中的所有.so文件,并从SRC_DIR复制它们。为什么没有发生这种情况
SRC_DIR := ./src/spg
DST_DIR := ./venv/lib/python2.7/site-packages/planar_growth
SRC_FILES := node_degree_tracker spatialgrowth splay data_structures
DST_FILES_CYTHON = $(patsubst %,$(DST_DIR)/%.so,$(SRC_FILES))
$(DST_DIR):
virtualenv --system-site-packages venv
mkdir $(DST_DIR)
$(DST_DIR)/%.py: $(SRC_DIR)/%.py $(DST_DIR)
cp $< $@
compile:
cd ./src/spg && \
python setup.py build_ext --inplace
.PHONY: $(SRC_DIR)/%.so
$(SRC_DIR)/%.so: compile
$(DST_DIR)/%.so: $(SRC_DIR)/%.so $(DST_DIR)
cp $< $@
all: $(DST_FILES_CYTHON)
cp $(SRC_DIR)/simulate_spg.py $(DST_DIR)/.
问题在于:
$(SRC_DIR)/%.so: compile
这是一个没有配方的模式规则。我目前找不到参考资料,但这是一个问题,至少在Make的某些版本中是如此
因此,给它一个没有任何作用的配方,比如:
$(SRC_DIR)/%.so: compile
@:
或者这个:
$(SRC_DIR)/%.so: compile;
包含来自
make-d
的输出。没有配方的模式规则本身不是问题:只是它记录的行为有些出乎意料;没有配方的模式规则将删除模式规则。这在GNU make的所有版本中都是正确的,因为添加了模式规则。@MadScientist:我模糊地记得,但在手册中找不到它;你应该回答,我会删除我的答案。@Madscient如果你想给出一个规范的答案,我会把它保留24小时。如果不是的话,我会接受Beta版的答案。另外,我有一个比一年前在cygwin上运行的版本更高的makefile。这有一个没有配方的模式规则,并且按照我的预期工作。@Beta您说明了问题和解决方案:您应该得到接受。我只是澄清了一件事(请随时用澄清更新您的答案)。干杯
$(SRC_DIR)/%.so: compile;