命令包装器¶
cmd_wrapper.py
扩展插件是一个 Python 脚本,它接收由 self.run()
配方调用提供的命令行参数,并允许拦截它们并返回一个新的命令行参数。
此插件必须位于 extensions/plugins
缓存文件夹中,并且可以使用 conan config install
命令安装。
例如
def cmd_wrapper(cmd, **kwargs):
return 'echo "{}"'.format(cmd)
只会拦截命令并将其显示到终端,这意味着所有配方中所有 self.run()
的命令都不会执行,而只是回显。
**kwargs
是一个强制性的通用参数,用于在未来发生变化以及 Conan 注入新的关键字参数时保持健壮性。即使未使用,不添加它也可能导致扩展在未来的 Conan 版本中失败。
更常见的用例是在某些命令上注入并行化工具,这可能看起来像这样
def cmd_wrapper(cmd, **kwargs):
# lets parallelize only CMake invocations
if cmd.startswith("cmake"):
return 'parallel-build "{}" --parallel-argument'.format(cmd)
# otherwise return same command, not modified
return cmd
conanfile
对象作为参数传递,因此可以根据调用者自定义行为。
def cmd_wrapper(cmd, conanfile, **kwargs):
# Let's parallelize only CMake invocations, for a few specific heavy packages
name = conanfile.ref.name
heavy_pkgs = ["qt", "boost", "abseil", "opencv", "ffmpeg"]
if cmd.startswith("cmake") and name in heavy_pkgs:
return 'parallel-build "{}" --parallel-argument'.format(cmd)
# otherwise return same command, not modified
return cmd