考虑到PHONY目标的GNU make手册中的这段摘录:
完成后,
make clean' will run the commands regardless of whether there is a file named清理'.
为什么我没有看到我的食谱被执行,事件虽然在调试输出中说它必须重新制作这些目标?这是一个示例makefile来演示该问题:
all:
@echo Rule to build 'all'
.PHONY: clean a.clean b.clean
clean: a.clean b.clean
@echo Cleaning toplevel
%.clean:
@echo Cleaning $*
Run Code Online (Sandbox Code Playgroud)
这是输出 - 注意没有提到 Cleaning $*
make: Entering directory `/tmp'
Cleaning toplevel
make: Leaving directory `/tmp'
Run Code Online (Sandbox Code Playgroud)
以下是来自的输出-d:
Considering target file `clean'.
File `clean' does not exist.
Considering target file `a.clean'.
File `a.clean' does not exist.
Finished prerequisites of target file …Run Code Online (Sandbox Code Playgroud) 我正在尝试设计一个搜索过滤器来提取具有特定成员的组。这是有效的,因为它会拉动所有组:
(&(objectClass=group)(member=*))
Run Code Online (Sandbox Code Playgroud)
但这并没有,尽管当我查看完整的组列表时,“成员”列表包含一个与表达式匹配的条目:
(&(objectClass=group)(member=*MySurname\\, MyForename*))
Run Code Online (Sandbox Code Playgroud)
这甚至不返回任何结果:
(&(objectClass=group)(member=*MyForename*))
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎样才能让它工作?
驱动API服务的构建需要很长时间(10+秒)。我尝试酸洗服务并重新加载它,但没有任何乐趣。有人知道如何让这个东西在本地缓存吗?
debug("Building Google Drive service")
from apiclient.discovery import build
self._service = build('drive', 'v2', http = http)
debug("Initialisation complete")
Run Code Online (Sandbox Code Playgroud) 我有一些代码正在生成正则表达式.以下表达式实际上是:
^(?:\s*((exclude|include|hide|show|protect|risk|dir-merge|merge)),\s*((-|+|H|S|P|R|:|.))\s*(\S+)|\s*,?\s*((-|+|H|S|P|R|:|.))\s*(\S+)|\s*((exclude|include|hide|show|protect|risk|dir-merge|merge))\s*(\S+))$
Run Code Online (Sandbox Code Playgroud)
它看起来很复杂,但它本质上意味着匹配以下内容,其中包括文件中的行:
dir-merge, : /some/file
merge, . /some/other/file
. /another/file
, : /yet/another/file
Run Code Online (Sandbox Code Playgroud)
因此\s*导致Python正则表达式编译错误的匹配.
有没有更好的方法在单个表达式中匹配这些组合而不匹配块nothing?
回答
除了答案之外,值得一提的是我通过形成以下表达式来解决这个问题:
^(?:\s*(exclude|include|hide|show|protect|risk|dir-merge|merge),\s*([-+HSPR:.])\s*(\S+)|\s*,?\s*([-+HSPR:.])\s*(\S+)|\s*(exclude|include|hide|show|protect|risk|dir-merge|merge)\s*(\S+))$
Run Code Online (Sandbox Code Playgroud)
微小的差异是从过渡(-|+|H|S|P|R|:|.)到([-+HSPR:.]).方括号具有转义字符的效果,阻止了|+表达式匹配nothing.