使用C ++和Stack / Cabal编译Haskell软件包

特里斯坦

我想使用一个打包程序http://hackage.haskell.org/package/clipper来检测复杂多边形的交集。这是C ++程序包的FFI。运行就可以了

cabal build --with-gcc=/usr/bin/g++

但不是这样。有什么方法可以将该gcc选项放入cabal文件中,或者以其他方式获取我的堆栈项目以使用g ++构建依赖项?

出于某些原因设置$ PATH无效:

%  cabal build --with-gcc=g++
Building clipper-0.0.1...
Preprocessing library clipper-0.0.1...
[1 of 1] Compiling Algebra.Clipper  ( dist/build/Algebra/Clipper.hs, dist/build/Algebra/Clipper.o )
In-place registering clipper-0.0.1...

%  PATH=$(pwd):$PATH gcc
g++: fatal error: no input files
compilation terminated.

%  PATH=$(pwd):$PATH cabal build 
Building clipper-0.0.1...
Preprocessing library clipper-0.0.1...
In file included from Clipper.hsc:27:0:
cbits/clipper.hpp:29:18: fatal error: vector: Dosiero aŭ dosierujo ne ekzistas
compilation terminated.
compiling dist/build/Algebra/Clipper_hsc_make.c failed (exit code 1)
command was: /usr/bin/gcc -c dist/build/Algebra/Clipper_hsc_make.c -o dist/build/Algebra/Clipper_hsc_make.o -fno-stack-protector -D__GLASGOW_HASKELL__=710 -Dlinux_BUILD_OS=1 -Dx86_64_BUILD_ARCH=1 -Dlinux_HOST_OS=1 -Dx86_64_HOST_ARCH=1 -Icbits -Idist/build/autogen -include dist/build/autogen/cabal_macros.h -I/usr/local/haskell/ghc-7.10.2-x86_64/lib/ghc-7.10.2/base_GDytRqRVSUX7zckgKqJjgw/include -I/usr/local/haskell/ghc-7.10.2-x86_64/lib/ghc-7.10.2/integ_2aU3IZNMF9a7mQ0OzsZ0dS/include -I/usr/local/haskell/ghc-7.10.2-x86_64/lib/ghc-7.10.2/include -I/usr/local/haskell/ghc-7.10.2-x86_64/lib/ghc-7.10.2/include/

同样,按下面@ErikR的建议更改Setup.hs也无济于事。

% runghc Setup.hs build
"Hello, I am running"
fomg
BuildFlags
  { buildProgramPaths = []
  , buildProgramArgs = []
  , buildDistPref = Flag "dist"
  , buildVerbosity = Flag Normal
  , buildNumJobs = NoFlag
  , buildArgs = []
 }
fimg
BuildFlags
  { buildProgramPaths = [ ( "gcc" , "/usr/bin/g++" ) ]
  , buildProgramArgs = []
  , buildDistPref = Flag "dist"
  , buildVerbosity = Flag Normal
  , buildNumJobs = NoFlag
  , buildArgs = []
  }
Building clipper-0.0.1...
Preprocessing library clipper-0.0.1...
In file included from Clipper.hsc:27:0:
(etc)

请注意,它在buildHook行崩溃,因此为了打印标志,我需要更改顺序。

埃里克

试试下面这个简单的自定义Setup.hs文件:

import Distribution.Simple
import System.Environment

main = do
  args <- getArgs
  defaultMainArgs $ ["--with-gcc=c++"] ++ args

原始答案

一些想法:

(1)创建一个名为的包装器脚本gcc,它调用g++将脚本放在PATH的早期,以便运行gcc将运行脚本而不是real gcc也许只有在构建Clipper包时,才具有此包装器脚本。

(2)编写一个自定义的Setup.hs。

  1. build-type将clipper.cabal文件中字段修改Custom而不是Simple
  2. 将Setup.hs文件替换为:

    import Distribution.Simple
    import Distribution.Simple.Setup
    import Distribution.Simple.LocalBuildInfo
    import Distribution.PackageDescription
    import Text.Show.Pretty
    
    main = do
      let hooks = simpleUserHooks
    
          myBuild :: PackageDescription -> LocalBuildInfo -> UserHooks -> BuildFlags -> IO ()
          myBuild pkgd buildinfo uhooks flags = do
            putStrLn $ ppShow flags
            let flags' = flags { buildProgramPaths = [("gcc","g++")] ++ (buildProgramPaths flags) }
            buildHook hooks pkgd buildinfo uhooks flags'
            putStrLn $ ppShow flags'
          hooks' = hooks { buildHook = myBuild }
    
      defaultMainWithHooks hooks'
    

注意:不需要导入Text.Show.Pretty,因此,如果未安装它,则可以将其删除,并可以调用ppShow。

上面的Setup.hs应该与用调用cabal具有相同的效果--with-gcc=g++

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法使用GHC 7.8rc2和Windows 7编译简单的hello世界(或使用cabal安装软件包)

来自分类Dev

如何(安装和使用)Haskell中的软件包

来自分类Dev

如何使用堆栈/ cabal顺序构建每个haskell软件包?

来自分类Dev

使用Cabal安装Haskell软件包而无需连接互联网

来自分类Dev

使用Stack安装Aeson软件包

来自分类Dev

删除Stack / Cabal软件包并安装旧版本

来自分类Dev

Cabal & Stack 从哪里获取 Hackage 软件包?

来自分类Dev

Cabal:重建软件包以使用较新的库

来自分类Dev

Cabal:重建软件包以使用较新的库

来自分类Dev

无法编译使用Objective-C软件包的Swift软件包

来自分类Dev

Haskell Stack从github安装软件包的依赖关系

来自分类Dev

使用ForecastCombinations软件包和Forecast软件包进行单变量预测

来自分类Dev

Travis CI使用我的使用C ++,Rcpp和RcppArmadillo的R软件包生成错误

来自分类Dev

正确使用可选的软件包功能和依赖项

来自分类Dev

使用Packrat和AppVeyor构建R软件包

来自分类Dev

React Native:无法导入和使用外部软件包

来自分类Dev

使用和安装Python软件包时的权限问题

来自分类Dev

使用Webpacker和Rails导入npm软件包的图像

来自分类Dev

导入和使用Google Cloud软件包

来自分类Dev

使用pip和pipenv构建并安装本地软件包

来自分类Dev

结合使用从quicklisp安装的软件包和CLISP

来自分类Dev

使用带Debian的zip软件包和密码

来自分类Dev

使用新Python和旧软件包的virtualenv

来自分类Dev

使用和安装Python软件包时的权限问题

来自分类Dev

React Native:无法导入和使用外部软件包

来自分类Dev

使用GNU make启用概要分析的编译软件包

来自分类Dev

如何使用sbuild交叉编译armhf的Qt软件包?

来自分类Dev

如何使用“ nix搜索”搜索Haskell软件包?

来自分类Dev

在Windows上使用C ++ 11和Rcpp构建R软件包

Related 相关文章

  1. 1

    无法使用GHC 7.8rc2和Windows 7编译简单的hello世界(或使用cabal安装软件包)

  2. 2

    如何(安装和使用)Haskell中的软件包

  3. 3

    如何使用堆栈/ cabal顺序构建每个haskell软件包?

  4. 4

    使用Cabal安装Haskell软件包而无需连接互联网

  5. 5

    使用Stack安装Aeson软件包

  6. 6

    删除Stack / Cabal软件包并安装旧版本

  7. 7

    Cabal & Stack 从哪里获取 Hackage 软件包?

  8. 8

    Cabal:重建软件包以使用较新的库

  9. 9

    Cabal:重建软件包以使用较新的库

  10. 10

    无法编译使用Objective-C软件包的Swift软件包

  11. 11

    Haskell Stack从github安装软件包的依赖关系

  12. 12

    使用ForecastCombinations软件包和Forecast软件包进行单变量预测

  13. 13

    Travis CI使用我的使用C ++,Rcpp和RcppArmadillo的R软件包生成错误

  14. 14

    正确使用可选的软件包功能和依赖项

  15. 15

    使用Packrat和AppVeyor构建R软件包

  16. 16

    React Native:无法导入和使用外部软件包

  17. 17

    使用和安装Python软件包时的权限问题

  18. 18

    使用Webpacker和Rails导入npm软件包的图像

  19. 19

    导入和使用Google Cloud软件包

  20. 20

    使用pip和pipenv构建并安装本地软件包

  21. 21

    结合使用从quicklisp安装的软件包和CLISP

  22. 22

    使用带Debian的zip软件包和密码

  23. 23

    使用新Python和旧软件包的virtualenv

  24. 24

    使用和安装Python软件包时的权限问题

  25. 25

    React Native:无法导入和使用外部软件包

  26. 26

    使用GNU make启用概要分析的编译软件包

  27. 27

    如何使用sbuild交叉编译armhf的Qt软件包?

  28. 28

    如何使用“ nix搜索”搜索Haskell软件包?

  29. 29

    在Windows上使用C ++ 11和Rcpp构建R软件包

热门标签

归档