使用Haskell Stack构建时,如何用Clang替代GCC编译C源文件?
改用Clang编译Haskell项目中的C源文件
完全可以通过修改stack.yaml或package.yaml实现,两种配置方式分别对应全局项目和单个包的场景,具体操作如下:
方式一:全局修改(stack.yaml)
在项目根目录的stack.yaml中添加ghc-options配置,指定GHC使用Clang作为C编译器:
ghc-options: "$locals": -pgmc clang
-pgmc是GHC的专用参数,用于指定C编译器路径/命令。如果你的系统中Clang的命令是带版本号的(比如clang-16),或者不在默认PATH里,直接替换成对应命令即可。
方式二:单个包修改(package.yaml)
如果只想为项目中的某个包配置Clang,在该包的package.yaml里添加ghc-options:
ghc-options: - -pgmc clang
这种方式只会对当前包生效,适合多包项目中差异化配置编译工具的场景。
额外配置说明
如果需要给Clang传递额外编译参数(比如开启警告、指定标准版本),可以搭配-optc参数:
# stack.yaml中示例:开启Wall警告并指定C17标准 ghc-options: "$locals": - -pgmc clang - -optc -Wall - -optc -std=c17
注意:配置前确保系统已安装Clang,且对应的命令能在当前环境的PATH中被找到,否则Stack会抛出编译器找不到的错误。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

