2017-09-19 4 views
2

Je voudrais ajouter quelques drapeaux (S, en ligne 20, nodynlink) à mon dossier _oasis mais je reçois une erreur de compilation:Comment ajouter OCAMLOPTFLAGS à Oasis?

AlphaFeatures: ocamlbuild_more_args 
XOCamlbuildExtraArgs: "-cflags '-S -inline 20'" 

Je me demande comment pouvez-vous ajouter ces derniers.

L'erreur assez longue:

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

Quel type d'erreur de compilation obtenez-vous? –

+0

Bonjour @ ÉtienneMillon J'ai ajouté l'erreur. – Istvan

+0

Super! Cela devrait vous aider à trouver une réponse :) –

Répondre

2

L'option -cflags prend une liste séparée par des virgules d'options et il passe au compilateur ocamlc. Ainsi, dans ocamlbuild' src/main.native -cflags -S -inline 20 seule l'option -S est passée à ocamlc, alors que -inline et 20 sont prises par ocamlbuild lui-même. Ainsi, la bonne façon de passer plusieurs options pour ocamlc est:

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

Cela aussi échouer, cependant, puisque ocamlc ne reconnaît pas -cflags ou -inline options, car ils sont les options de ocamlopt. OCaml a deux compilateur - un est appelé ocamlc et il produit le bytecode, un autre est ocamlopt qui produit le code natif. Bien qu'ils aient quelques options communes, certains ne sont certainement pas partagés. Par exemple, le compilateur bytecode ne peut pas émettre d'assembly.

Pour passer des options ocamlopt vous pouvez utiliser le champ NativeOpt dans _oasis ou utiliser des balises paramétriques dans le fichier _tags (celui-ci est utile pour contrôler flambda). Regardez ocamlbuild -documentation pour l'ensemble des balises reconnues.