-2
A
回答
2
幾乎沒有哈斯克爾項目使用一個Makefile,因爲這是笨重,難以閱讀,而且容易出錯。
對於簡單的一次性項目,你真的不需要任何專門的編譯系統在所有:GHC本身可以計算出模塊之間的依賴關係:
[email protected]:/tmp$ cat >> Hello.hs
module Main where
import Greeting
main = putStrLn greeting
[email protected]:/tmp$ cat >> Greeting.hs
module Greeting where
greeting = "Hello, World!"
[email protected]:/tmp$ ghc Hello.hs
[1 of 2] Compiling Greeting (Greeting.hs, Greeting.o)
[2 of 2] Compiling Main (Hello.hs, Hello.o)
Linking Hello ...
[email protected]:/tmp$ ./Hello
Hello, World!
...或者乾脆
[email protected]:/tmp$ runhaskell Hello.hs
Hello, World!
對於更復雜的項目,絕對是圖書館,你要使用Cabal。即您需要一個.cabal
文件,例如對於上述「項目」 hello.cabal
。可以通過cabal
工具半自動生成這樣的文件:
[email protected]:/tmp$ mkdir hello
[email protected]:/tmp$ mv Hello.hs hello
[email protected]:/tmp$ mv Greeting.hs hello
[email protected]:/tmp$ cd hello/
[email protected]:/tmp/hello$ cabal init
Package name? hello
This package name is already used by another package on hackage. Do you want to choose a different name? [default: y] n
Package version? [default: 0.1.0.0]
Please choose a license:
1) GPL-2
2) GPL-3
3) LGPL-2.1
4) LGPL-3
5) AGPL-3
6) BSD2
* 7) BSD3
8) MIT
9) ISC
10) MPL-2.0
11) Apache-2.0
12) PublicDomain
13) AllRightsReserved
14) Other (specify)
Your choice? [default: BSD3] 12
Author name? [default: Justus Sagemüller]
Maintainer email? [default: [email protected]]
Project homepage URL?
Project synopsis? hello
Project category:
* 1) (none)
2) Codec
3) Concurrency
4) Control
5) Data
6) Database
7) Development
8) Distribution
9) Game
10) Graphics
11) Language
12) Math
13) Network
14) Sound
15) System
16) Testing
17) Text
18) Web
19) Other (specify)
Your choice? [default: (none)] 17
What does the package build:
1) Library
2) Executable
Your choice? 2
What is the main module of the executable:
* 1) Main.hs (does not yet exist, but will be created)
2) Main.lhs (does not yet exist, but will be created)
3) Other (specify)
Your choice? [default: Main.hs (does not yet exist, but will be created)] 3
Please specify? Hello.hs
Source directory:
* 1) (none)
2) src
3) Other (specify)
Your choice? [default: (none)]
What base language is the package written in:
* 1) Haskell2010
2) Haskell98
3) Other (specify)
Your choice? [default: Haskell2010]
Add informative comments to each field in the cabal file (y/n)? [default: n]
Guessing dependencies...
Generating Setup.hs...
Generating ChangeLog.md...
Generating hello.cabal...
You may want to edit the .cabal file and add a Description field.
此時該文件將包含:
[email protected]:/tmp/hello$ cat hello.cabal
-- Initial hello.cabal generated by cabal init. For further documentation,
-- see http://haskell.org/cabal/users-guide/
name: hello
version: 0.1.0.0
synopsis: hello
-- description:
license: PublicDomain
author: Justus Sagemüller
maintainer: [email protected]
category: Text
build-type: Simple
extra-source-files: ChangeLog.md
cabal-version: >=1.10
executable hello
main-is: Hello.hs
-- other-modules:
-- other-extensions:
build-depends: base >=4.10 && <4.11
-- hs-source-dirs:
default-language: Haskell2010
這不是很完整,你仍然需要添加Greeting.hs
到項目:(沒有文件擴展名)
...
executable hello
main-is: Hello.hs
other-modules: Greeting
-- other-extensions:
...
但僅此而已,你現在可以做
[email protected]:/tmp/hello$ cabal build
Resolving dependencies...
Configuring hello-0.1.0.0...
Preprocessing executable 'hello' for hello-0.1.0.0..
Building executable 'hello' for hello-0.1.0.0..
[1 of 2] Compiling Greeting (Greeting.hs, dist/build/hello/hello-tmp/Greeting.o)
[2 of 2] Compiling Main (Hello.hs, dist/build/hello/hello-tmp/Main.o)
Linking dist/build/hello/hello ...
或者,只需運行腳本,cabal run
或cabal install
以使其始終可用於您的系統。
相關問題
- 1. 在Linux上爲C程序製作makefile
- 2. 如何爲目標語言製作CFLocale?
- 3. 如何製作多語言C#控制檯應用程序?
- 4. 作爲設備語言更改更改應用程序語言
- 5. 如何在winforms中製作多語言應用程序
- 6. 如何製作多語言應用程序
- 7. 如何用語言製作Windows窗體應用程序?
- 8. Haskell迷你語言
- 9. Agda作爲編程語言
- 10. 如何使用makefile/autoconf製作可安裝的Perl程序?
- 11. 如何將應用程序語言切換爲當前用戶的語言?
- 12. 如何製作語言綁定?
- 13. 如何製作多語言網站?
- 14. 如何製作多語言TabBarItem
- 15. 如何製作Crystal Reports多語言?
- 16. 作爲桌面編程語言的PHP
- 17. 製作iPhone應用程序多語言的最佳方式
- 18. 爲ASP.NET網站製作替代語言
- 19. 如何將屏幕圖像作爲程序的輸入,在Haskell
- 20. 如何使用Java作爲Arduino的編程語言?
- 21. 如何使用Vala編程語言製作PHP模塊?
- 22. 如何將我的java程序語言環境設置爲ccjk?
- 23. C語言程序不起作用?
- 24. 如何在主菜單中爲Drupal8製作語言切換器
- 25. 如何使用python將語音命令程序製作爲android?
- 26. 使用C#作爲C#應用程序的腳本語言
- 27. 在處理語言中製作透明背景(應用程序)
- 28. 製作一個wxPython應用程序多語言
- 29. R作爲通用編程語言
- 30. 爲非Unicode程序獲取語言
我們知道你想要什麼。大。你到目前爲止有什麼? – panther
我不建議。而是使用'ghc --make',或'cabal'或'stack'。如果您確實需要'make',請閱讀有關它的文檔:https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/separate_compilation.html#using-make – chi
那麼你首先想想你是什麼命令在製作程序時調用自己,然後將其轉換爲Makefile。 –