2010-05-30 61 views
4

我打算髮佈一個F#程序作爲二進制和源代碼,以便用戶可以根據需要重新編譯它。在Windows上,我明白如何做到這一點:提供.fsproj和.sln文件,Visual Studio和MSBuild都可以理解。F#,Linux和makefiles

在Linux上,C程序的傳統解決方案是makefile。這取決於gcc是直接可用的,它總是這樣。

F#編譯器可以安裝在Linux上並且可以在Mono下運行,所以目前爲止沒什麼問題。但是,據我所知,它不創建fsc運行編譯器的情況,而不是命令mono ...path.../fsc.exe。這也很好,除了我不知道路徑是什麼。因此,在我的情況下運行編譯器的完整命令可能是mono ~/FSharp-2.0.0.0/bin/fsc.exe types.fs tptp.fs main.fs -r FSharp.PowerPack.dll,只是我不確定fsc.exe實際位於用戶計算機上的位置。

有沒有辦法在makefile中找到它,或者只是在文檔中解釋上述內容並依賴用戶根據他的設置修改命令會更好嗎?

+3

Aaaand這就是爲什麼.NET和跨平臺的不要混用。 – LukeN 2010-05-30 16:28:48

+1

您認爲什麼樣的技術能夠做得更好?或者你是否主張恢復到C,即使是那些明顯不合適的語言的項目? – rwallace 2010-05-30 16:37:53

+2

如果您想允許用戶重新編譯,假設他們的技術足以爲自己的安裝填寫適當的路徑,可能是安全的嗎? – kvb 2010-05-30 16:53:21

回答

8

如果你不想使用autoconf,只需寫下README,並告訴我們如何設置工具來編譯你的程序。 例如,您可以要求使用binfmt_misc內核模塊來允許系統自動使用正確的啓動程序來獲取已知格式的文件,因爲$ PATH必須包含fsc.exe的路徑,因此您的Makefile將如下代碼:

FILES=types.fs tptp.fs main.fs 

target.exe: ${FILES} 
     fsc.exe -o [email protected] ${FILES} -r FSharp.PowerPack.dll 

也可以讓用戶指向使用Makefile中的變量編譯器:

MONO=/usr/bin/mono 
FSC=/usr/local/fsharp/bin/fsc.exe 
COMPILER=${MONO} ${FSC} 
FILES=types.fs tptp.fs main.fs 

target.exe: ${FILES} 
     ${COMPILER} -o [email protected] ${FILES} -r FSharp.PowerPack.dll