2014-06-23 3 views
3

다른 사람의 코드로 해킹하고 있습니다. 이 파일에는 .h 파일 (코드가없고 매크로 만)에 정의 된 매크로가 여러 개 있으며 이러한 매크로는 여러 Haskell 파일에 사용됩니다. 내가 누락 된 부분은이 편집을 허용하는 단계입니다. Haskell 파일을 컴파일하려고 할 때 누락되거나 정의되지 않은 매크로에 오류가 발생합니다. 헤더 파일에 정의 된 매크로를 사용할 GHC 옵션이 있습니까? 나는 GHCi와 똑같이하려고 노력하고있다.CPP 매크로 내보내기

.h 파일의 이름을 .hs으로 변경하고 매크로를 사용하는 파일로 가져 오려고했지만 매크로를 내보낼 수 없으며 자동으로 내 보내지 않았습니다.

GHC (i)로 컴파일 할 때 어떻게 이들 매크로를 사용할 수 있습니까?

+0

는 GHC 6.6 문서에 두 페이지를 참조하십시오 http://www.haskell.org/ghc/docs/6.6/html/users_guide/options-phases.html#options-C -compiler 및 http://www.haskell.org/ghc/docs/6.6/html/users_guide/options-phases.html#options-C-compiler를 참조하십시오. 그러나 이것은 최신 GHC 버전에서 사용되지 않습니다 : http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/ffi-ghc.html#glasgow-foreign-headers –

+0

FFI 전에, 그래서 그 옵션을 보았습니다. 그러나 전체 FFI를 사용하려고하지는 않습니다. 여기에 몇 가지 매크로가 있습니다. 또한, 헤더 파일을 포함하여 deprectation 메시지가 나타내는 것처럼 도움이되지 않는 것 같습니다. – crockeea

+3

당신의 haskell 파일의 맨 위에 CPP pragma를 추가하고 haskell 파일에'#include foo.h' 줄을 추가하십시오. C 전처리 기가 매크로를 확장합니다. – vivian

답변

3

haskell 파일 맨 위에 CPP pragma를 추가하고 #include foo.h 행을 haskell 파일에 추가하십시오. C 전처리 기가 매크로를 확장합니다.

-Dsymbol=value과 같은 옵션은 [ghc]의 호출로 컴파일 된 모든 파일에 대한 매크로를 정의합니다.

[1] https://www.haskell.org/ghc/docs/latest/html/users_guide/options-phases.html

+1

* single * 매크로에 대해'-D' 플래그에 대해 알고 있지만 위의 내용은 같은 방식으로'.h' 파일에있는 모든 매크로를 만드는 것에 관한 것입니다. – crockeea