我打算将F#程序分发为二进制和源代码,以便用户可以根据需要重新编译它。在Windows上,我理解如何执行此操作:提供.fsproj和.sln文件,Visual Studio和MSBuild都可以理解这些文件。
在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中找到它,或者最好还是在文档中解释上述内容并依赖用户根据他的设置修改命令?
答案 0 :(得分:9)
如果您不想使用autoconf,请编写README并告诉我们如何设置工具来编译您的程序。 例如,你可以要求使用binfmt_misc内核模块来允许系统自动使用正确的启动程序来处理已知格式的文件,因为$ PATH必须包含fsc.exe的路径,所以你的Makefile就像下面的代码一样:
FILES=types.fs tptp.fs main.fs
target.exe: ${FILES}
fsc.exe -o $@ ${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 $@ ${FILES} -r FSharp.PowerPack.dll