2010-05-30 3 views
4

Я намерен распространять программу F # как двоичную, так и исходную, поэтому у пользователя есть возможность перекомпилировать ее, если это необходимо. В Windows я понимаю, как это сделать: предоставить файлы .fsproj и .sln, которые могут понять как Visual Studio, так и MSBuild.F #, Linux и make-файлы

В Linux традиционное решение для программ на C - это make-файл. Это зависит от того, что 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

+1

Какой стек технологии, по вашему мнению, лучше подходит? Или вы выступаете за возвращение к C даже для проектов, для которых это явно неприемлемый язык? – rwallace

+2

Если вы хотите разрешить перекомпилировать пользователей, можно ли предположить, что они достаточно технические, чтобы правильно заполнить путь для их собственной установки? – kvb

ответ

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