在wscript

时间:2018-01-26 15:43:34

标签: waf

我有一个添加了一些选项的waf脚本,因此我使用Options中的waflib

最小的工作示例是:

from waflib import Context, Options
from waflib.Tools.compiler_c import c_compiler

def options(opt):
    opt.load('compiler_c')

def configure(cnf):
    cnf.load('compiler_c')
    cnf.env.abc = 'def'

def build(bld):
     print('hello')

这导致我不支持的很多选项,但是我想或者必须支持的其他选项。完整的默认支持命令列表如下所示。但是如何删除实际上不支持的选项,如

  • 一些主要命令,例如diststepinstall
  • 一些选项,例如--no-msvs-lazy
  • 一些配置选项,例如-t
  • 完全整个部分Installation and uninstallation options

选项的完整输出是:

waf [commands] [options]

Main commands (example: ./waf build -j4)
build    : executes the build
clean    : cleans the project
configure: configures the project
dist     : makes a tarball for redistributing the sources
distcheck: checks if the project compiles (tarball from 'dist')
distclean: removes build folders and data
install  : installs the targets on the system
list     : lists the targets to execute
step     : executes tasks in a step-by-step fashion, for debugging
uninstall: removes the targets installed

Options:
--version             show program's version number and exit
-c COLORS, --color=COLORS
                        whether to use colors (yes/no/auto) [default: auto]
-j JOBS, --jobs=JOBS  amount of parallel jobs (8)
-k, --keep            continue despite errors (-kk to try harder)
-v, --verbose         verbosity level -v -vv or -vvv [default: 0]
--zones=ZONES         debugging zones (task_gen, deps, tasks, etc)
-h, --help            show this help message and exit
--msvc_version=MSVC_VERSION
                        msvc version, eg: "msvc 10.0,msvc 9.0"
--msvc_targets=MSVC_TARGETS
                        msvc targets, eg: "x64,arm"
--no-msvc-lazy        lazily check msvc target environments

Configuration options:
    -o OUT, --out=OUT   build dir for the project
    -t TOP, --top=TOP   src dir for the project
    --prefix=PREFIX     installation prefix [default: 'C:\\users\\user\\appdata\\local\\temp']
    --bindir=BINDIR     bindir
    --libdir=LIBDIR     libdir
    --check-c-compiler=CHECK_C_COMPILER
                        list of C compilers to try [msvc gcc clang]

Build and installation options:
    -p, --progress      -p: progress bar; -pp: ide output
    --targets=TARGETS   task generators, e.g. "target1,target2"

Step options:
    --files=FILES       files to process, by regexp, e.g. "*/main.c,*/test/main.o"

Installation and uninstallation options:
    --destdir=DESTDIR   installation root [default: '']
    -f, --force         force file installation
    --distcheck-args=ARGS
                        arguments to pass to distcheck

1 个答案:

答案 0 :(得分:2)

对于选项,选项上下文具有parser属性,该属性是python optparse.OptionParser。您可以使用remove_option的{​​{1}}方法:

OptionParser

对于命令,waf中有一个自动注册Context类的元类(参见waflib.Context sources)。

因此所有def options(opt): opt.parser.remove_option("--top") opt.parser.remove_option("--no-msvs-lazy") 类都存储在全局变量Context中。要摆脱它们,你可以操纵这个变量。例如,为了摆脱waflib.Context.classes等,您可以执行以下操作:

StepContext

命令import waflib def options(opt): all_contexts = waflib.Context.classes all_contexts.remove(waflib.Build.StepContext) all_contexts.remove(waflib.Build.InstallContext) all_contexts.remove(waflib.Build.UninstallContext) dist/distcheck中定义的特例。要摆脱它们并不容易。