我想在我的_oasis文件中添加几个标志(S,内联20,nodynlink),但是我收到了编译错误:
AlphaFeatures: ocamlbuild_more_args
XOCamlbuildExtraArgs: "-cflags '-S -inline 20'"
我想知道你怎么能添加这些。
相当长的错误:
node:dir user$ make
ocaml setup.ml -build
/Users/user/.opam/system/bin/ocamlbuild: unknown option '-inline'.
Usage /Users/user/.opam/system/bin/ocamlbuild [options] <target>
-version Display the version
--version same as -version
-vnum Display the version number
--vnum same as -vnum
-quiet Make as quiet as possible
-verbose <level> Set the verbosity level on a scale from 0 to 8 (included)
-documentation Show rules and flags
-log <file> Set log file
-no-log No log file
-clean Remove build directory and other files, then exit
-r Traverse directories by default (true: traverse)
-I <path> Add to include directories
-Is <path,...> (same as above, but accepts a (comma or blank)-separated list)
-X <path> Directory to ignore
-Xs <path,...> (idem)
-lib <flag> Link to this ocaml library
-libs <flag,...> (idem)
-mod <module> Link to this ocaml module
-mods <module,...> (idem)
-pkg <package> Link to this ocaml findlib package
-pkgs <package,...> (idem)
-package <package> (idem)
-syntax <syntax> Specify syntax using ocamlfind
-lflag <flag> Add to ocamlc link flags
-lflags <flag,...> (idem)
-cflag <flag> Add to ocamlc compile flags
-cflags <flag,...> (idem)
-docflag <flag> Add to ocamldoc flags
-docflags <flag,...> (idem)
-yaccflag <flag> Add to ocamlyacc flags
-yaccflags <flag,...> (idem)
-lexflag <flag> Add to ocamllex flags
-lexflags <flag,...> (idem)
-ppflag <flag> Add to ocaml preprocessing flags
-pp <flag,...> (idem)
-tag <tag> Add to default tags
-tags <tag,...> (idem)
-plugin-tag <tag> Use this tag when compiling the myocamlbuild.ml plugin
-plugin-tags <tag,...> (idem)
-tag-line <tag> Use this line of tags (as in _tags)
-show-tags <path> Show tags that applies on that pathname
-ignore <module,...> Don't try to build these modules
-no-links Don't make links of produced final targets
-no-skip Don't skip modules that are requested by ocamldep but cannot be built
-no-hygiene Don't apply sanity-check rules
-no-plugin Don't build myocamlbuild.ml
-no-stdlib Don't ignore stdlib modules
-dont-catch-errors Don't catch and display exceptions (useful to display the call stack)
-just-plugin Just build myocamlbuild.ml
-byte-plugin Don't use a native plugin but bytecode
-plugin-option Use the option only when plugin is run
-sanitization-script Change the file name for the generated sanitization script
-no-sanitize Do not generate sanitization script
-nothing-should-be-rebuilt Fail if something needs to be rebuilt
-classic-display Display executed commands the old-fashioned way
-use-menhir Use menhir instead of ocamlyacc
-use-jocaml Use jocaml compilers instead of ocaml ones
-use-ocamlfind Use the 'ocamlfind' wrapper instead of using Findlib directly to determine command-line arguments. Use -no-ocamlfind to disable. Implies -plugin-use-ocamlfind.
-no-ocamlfind Don't use ocamlfind. Implies -plugin-no-ocamlfind.
-plugin-use-ocamlfind Use the 'ocamlfind' wrapper for building myocamlbuild.ml
-plugin-no-ocamlfind Don't use ocamlfind for building myocamlbuild.ml
-toolchain <toolchain> Set the Findlib toolchain to use. The default toolchain is always used for building myocamlbuild.ml.
-j <N> Allow N jobs at once (0 for unlimited)
-build-dir <path> Set build directory (implies no-links)
-install-lib-dir <path> Set the install library directory
-install-bin-dir <path> Set the install binary directory
-where Display the install library directory
-which <command> Display path to the tool command
-ocamlc <command> Set the OCaml bytecode compiler
-plugin-ocamlc <command> Set the OCaml bytecode compiler used when building myocamlbuild.ml (only)
-ocamlopt <command> Set the OCaml native compiler
-plugin-ocamlopt <command> Set the OCaml native compiler used when building myocamlbuild.ml (only)
-ocamldep <command> Set the OCaml dependency tool
-ocamldoc <command> Set the OCaml documentation generator
-ocamlyacc <command> Set the ocamlyacc tool
-menhir <command> Set the menhir tool (use it after -use-menhir)
-ocamllex <command> Set the ocamllex tool
-ocamlmklib <command> Set the ocamlmklib tool
-ocamlmktop <command> Set the ocamlmktop tool
-ocamlrun <command> Set the ocamlrun tool
-- Stop argument processing, remaining arguments are given to the user program
-help Display this list of options
--help Display this list of options
E: Failure("Command ''/Users/user/.opam/system/bin/ocamlbuild' src/main.native -cflags -S -inline 20 -tag debug' terminated with error code 1")
make: *** [build] Error 1
答案 0 :(得分:2)
-cflags
选项采用以逗号分隔的选项列表,并将其传递给ocamlc
编译器。因此,在ocamlbuild' src/main.native -cflags -S -inline 20
中,只有-S
选项传递给ocamlc
,而-inline
和20
由ocamlbuild
本身传递。因此,将多个选项传递给ocamlc
的正确方法是:
ocamlbuild -cflags -S,-inline,20 x.byte
但这也会失败,因为ocamlc
无法识别-cflags
或-inline
选项,因为它们是ocamlopt
的选项。 OCaml有两个编译器 - 一个叫做ocamlc
,它产生字节码,另一个产生ocamlopt
,产生本机代码。虽然他们有一些共同的选择,但有些肯定不会分享。例如,字节码编译器无法发出汇编。
要将选项传递给ocamlopt
,您可以使用NativeOpt
中的_oasis
字段,也可以使用_tags
文件中的参数标记(后者对控制flambda非常有用) 。查看ocamlbuild -documentation
以获取实际识别的标签集。