2012-04-18 13 views
5

Estoy usando camlp4.macro para habilitar la compilación condicional. Estoy teniendo problemas informando a OCamlbuild que ciertos archivos etiquetados con "use_jscore" deben preprocesarse con una opción determinada de camlp4. Esto es lo que tengo actualmente:opciones OCamlbuild y camlp4

let _ = dispatch begin function 
    | After_rules -> 
    flag ["ocaml"; "use_jscore"] (S[A"-package"; A"camlp4.macro"; A"-syntax"; A"camlp4o"; A"-ppopt"; A"-DUSE_JSCORE"]); 

Pero esto se escapa todo mal por OCamlbuild. Estoy usando ocamlfind, así que básicamente lo que quiero decir OCamlbuild es que todos los archivos OCaml etiquetados con "use_jscore" deben ser preprocesados ​​por camlp4.macro, que también tiene la opción -DUSE_JSCORE.

Respuesta

3

Usted se echa en falta una bandera en la lista de bandera que son coincidentes con:

let options = S[...] in 
flag ["ocaml"; "compile"; "use_jscore"] options; 
flag ["ocaml"; "ocamldep"; "use_jscore"] options 

De hecho, desea utilizar las opciones de camlp4 sólo cuando usted calcula las dependencias (donde está habilitada la bandera "ocamldep") y compilar (donde el indicador "compilar" está habilitado), pero no cuando se usa un preprocesador (donde el indicador "pp" está habilitado) o cuando se vincula (cuando el indicador "enlace" está habilitado).

Así que ahora si usa ocamlbuild -use-ocamlfind <target> debería funcionar correctamente.

+0

pero NO tengo que repetir la misma declaración exacta pero con s/compilación/DEP /? ¿Hay alguna forma de evitar la repetición? –

+0

Tiene razón, puede que tenga que repetir la declaración para 'dep'. Puede almacenar el contenido de 'S (...)' en una variable local si no desea repetirlo. – Thomas

4

Un _tags y el enfoque de línea de comando también debería funcionar, aunque no se dirigirá a archivos individuales.

Contenido de _tags:

<*.*>: syntax(camlp4o), package(camlp4.macro) 

línea de comandos:

ocamlbuild -use-ocamlfind -cflags -ppopt,-DUSE_JSCORE ... 
Cuestiones relacionadas