2017-09-19 69 views
2

我想幾個標誌(S,內嵌20,nodynlink)添加到我的_oasis文件,但我得到一個編譯錯誤:如何添加OCAMLOPTFLAGS到Oasis?

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

你會得到什麼樣的編譯錯誤? –

+0

Hi @ÉtienneMillon我添加了錯誤。 – Istvan

+0

太棒了!這應該有助於你找到一個安澤:) –

回答

2

-cflags選項採用用逗號分隔的選項列表,並把它傳遞給ocamlc編譯器。所以,在ocamlbuild' src/main.native -cflags -S -inline 20只有-S選項傳遞給ocamlc,而-inline20是由ocamlbuild本身。因此,通過多種選擇ocamlc正確的方法是:

ocamlbuild -cflags -S,-inline,20 x.byte 

這也將失敗,不過,因爲ocamlc不承認-cflags-inline的選擇,因爲它們的ocamlopt選項。 OCaml有兩個編譯器 - 一個叫做ocamlc,它產生字節碼,另一個是產生本地代碼的ocamlopt。雖然他們有一些共同的選擇,但有些絕對不會共享。例如,字節碼編譯器不能發出程序集。

選項傳遞給ocamlopt你可以使用NativeOpt_oasis_tags文件中使用的參數標籤(後者是控制flambda有用)。查看ocamlbuild -documentation以查看實際的一組識別標籤。