2012-04-18 2 views
5

조건부 컴파일을 사용하려면 camlp4.macro를 사용하고 있습니다. 나는 문제를 OCamlbuild에게 "use_jscore"태그가 붙은 특정 파일 에 주어진 camlp4 옵션으로 사전 처리해야한다고 알려주고 있습니다. 현재 가지고있는 것들은 다음과 같습니다 :OCamlbuild 및 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"]); 

그러나 이것은 OCamlbuild에 의해 완전히 이스케이프 처리됩니다. 나는 ocamlfind를 사용하고 있습니다. 따라서 기본적으로 OCamlbuild는 태그가 붙은 모든 OCaml 파일에 "use_jscore"가 -DUSE_JSCORE 옵션이 주어진 camlp4.macro에 의해 사전 처리되어야한다는 것을 알려줍니다.

답변

3

당신은 당신이 일치하는 플래그의 목록에서 플래그를 누락 : 사실

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

, 당신은 "ocamldep"플래그가 활성화되어 종속성을 (계산시에만 camlp4 옵션을 사용하려면) 및 compile ("컴파일"플래그가 활성화 된 경우) 컴파일하지만 전처리 기 ("pp"플래그가 활성화 된 경우) 또는 링크 할 때 ("링크"플래그가 활성화 된 경우) 컴파일 할 수 없습니다.

이제 ocamlbuild -use-ocamlfind <target>을 사용하면 올바르게 작동합니다.

+0

하지만 동일한 문하지만 S/컴파일/출발 /과를 반복 할 필요가 없습니다? 반복을 피할 수있는 방법이 있습니까? –

+0

맞습니다.'dep' 명령문을 반복해야 할 수도 있습니다. 'S (...)'의 내용을 반복하지 않으려면 지역 변수에 저장할 수 있습니다. – Thomas

4

개별 파일을 대상으로하지는 않지만 _ 태그 및 명령 줄 접근 방식도 작동해야합니다. _tags의

내용 :

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

명령 행 :

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