我正在尝试使其删除conf.py每个子目录(存储在变量中SUBDIRS)中的文件()的文本块.此段文字是在标签内的谎言#--Begin和#--End.请参阅下面的代码示例 为了整洁而不必在makefile中运行额外的shell脚本,我想在makefile中使用sed命令,但是我很难这样做.我无法在任何其他论坛帖子上找到解决方案,所以任何帮助都会感激不尽.
.PHONY $(SUBDIRS)
SUBDIRS = (list of all subdirectories that contain a relevant conf.py)
$(SUBDIRS):
sed '/#--Begin/,/#--End/d' Docs/$@/conf.py
Run Code Online (Sandbox Code Playgroud)
这个命令没有任何结果.
谢谢!
您的规则使用SUBDIRS列表作为其目标.Make看看它们是否存在,当然它们确实存在.它们不依赖于任何其他东西,因此它们是最新的,因此Make不需要做任何事情.
这有两种方法.一种是使用Phony Target 强制命令每次运行:
.PHONY: $(SUBDIRS)
$(SUBDIRS):
sed .....
Run Code Online (Sandbox Code Playgroud)
另一种是为文件的编辑和未编辑版本提供不同的名称,例如 conf.py和conf.py.in,并使用模式规则使第一个依赖于第二个:
$(SUBDIRS): Docs/%/conf.py: Docs/%/conf.py.in
sed '/#--Begin/,/#--End/d' $< >$@
Run Code Online (Sandbox Code Playgroud)
这样更好,因为只要输入文件发生变化,它就会自动运行.
sed在将命令合并到makefile之前,您应该在命令行上测试该命令.如上所述,它会删除您想要删除的行 - 然后将结果定向到stdout.要修改文件,您应该使用-i:
sed -i -e '/#--Begin/,/#--End/d' Docs/$@/conf.py
Run Code Online (Sandbox Code Playgroud)
可能还有其他问题.你没有向我们展示真正的makefile(.PHONY $(SUBDIRS)不合法,所以你不会粘贴一个正在运行的makefile),但规则可能甚至没有按你认为的那样执行.试试这个:
$(SUBDIRS):
@echo attempting to act on $@
@ls Docs/$@/conf.py
Run Code Online (Sandbox Code Playgroud)
在尝试引入命令之前,要使其完美地工作sed.
| 归档时间: |
|
| 查看次数: |
3034 次 |
| 最近记录: |