2012-12-02 4 views
3

Я учусь Haskell и простое сомнение, ударили меня, в чем разница между этими двумя командами для компиляции с использованием GHC (FAC это программа для расчета факториала):Компиляции в GHC

GHC -o фак fac.hs

и

GHC fac.hs

Теперь, чтобы запустить программу, я просто делаю fac.exe (я использую Windows).

Учитывая, что обе работы, которые являются правильными? и то и другое? И какой из них наиболее целесообразно использовать?

ответ

3

Оба в порядке. Единственное, что делает команда -o, это определить имя исполняемого файла, который сгенерирован. Что касается Haskell, это не имеет никакого значения.

Лично мне нравится использовать «-o», чтобы сделать вещи явными (так как мне нравится избегать неявных значений по умолчанию в целом) и чтобы они выглядели более похожими на другие компиляторы (например, компилятор gcc C заставляет вас использовать его опцию «-o», так как имя по умолчанию он использует в противном случае очень некрасиво)

+0

благодарит за ясный и краткий ответ. – user1493813

0

раньше считалось, что писать

ghc fac.hs 

действительно не работает. Вместо этого вы должны были сказать

ghc --make fac.hs 

Разница заключается в том, что бывшие компилирует fac.hs и ничего не делает, а второй проверяет, является ли fac.hs использует любые другие модули, которые нуждаются в перекомпиляции, автоматически включает в себя все необходимые пакеты и т.д. и так далее.

Однако поведение по умолчанию было изменено, и указанные выше две команды теперь идентичны. (Я забыл, когда это произошло, но прошло некоторое время назад.) Возможно, вы все еще видите документацию и примеры с явным переключателем --make, и лично мне нравится включать его. Но это только я.

Единственное, что дает вам переключатель -o, это возможность изменять имя выхода. Это может быть полезно, если у вас есть, скажем, Main.hs, и вы хотите, чтобы выход был вызван MyCoolProgram или что-то еще. Одна вещь, которую я будет сказать: под Linux, fac.hs (если это модуль Main), скомпилируется в исполняемый файл с именем fac, но под Windows он будет называться fac.exe. Если вы используете -o для жесткого кодирования двоичного имени, этого не произойдет. И я не уверен, что вы можете запустить двоичный файл Windows, который не заканчивается .exe ...

Смежные вопросы