Условно используя расширение.exe с системой сборки Shake.
Используя замечательную систему сборки Shake, я хочу скомпилировать проект способом, не зависящим от операционной системы хоста.
У меня проблемы с обнаружением двоичных файлов, потому что они имеют разные расширения в разных системах (например, Windows использует .exe
).
Если я использую need
чтобы определить, присутствуют ли требуемые двоичные файлы, как я могу проверить Main
или же Main.exe
в зависимости от того, является ли хост Linux или Windows?
1 ответ
Функция, которую вы ищете Development.Shake.FilePath.exe
, который оценивается в "exe"
на Windows и ""
на всех других платформах. Вы обычно пишете:
want ["MyExecutable" <.> exe]
"MyExecutable" <.> exe *> \out ->
cmd "MyCompiler" "-o" [out]
Для примера см. Examples.Self.Main, который строит Main
в Linux и Main.exe
на винде.
Единственным потенциальным препятствием является то, что все шаблоны файлов слева от *>
Должно быть уникальным. Если вы определите "//*" <.> exe *> ...
затем в Windows, которая будет соответствовать только исполняемым файлам (хорошо), но в Linux, которая будет соответствовать каждому файлу, конфликтуя со всеми другими шаблонами (плохо). Решение состоит в том, чтобы сделать исполняемые имена различными, например, поместить их в специальный выходной каталог, жестко закодировать имена как "Main" <.> exe
и т.д. В качестве альтернативы вы можете полагаться на тот факт, что только исполняемые файлы не имеют расширения в Linux с помощью:
(\x -> drop 1 (takeExtension x) == exe) ?> \out ->
...