2010-05-30 65 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