Я хочу иметь исполняемый скрипт prog
где-нибудь в файловой системе.
Я хочу байт-компилировать его с помощью guild compile -o prog.go prog
, чтобы его больше не нужно было компилировать и чтобы он запускался быстрее.
Я не могу понять, куда поместить файл prog.go
, чтобы программа не компилировалась автоматически в $HOME/.cache/guile/...
(я не хочу заполнять HOME-кеш каждого пользователя и компилировать его повторно). Поскольку где бы я ни ставил prog.go
и не указывал на него GUILE_LOAD_COMPILED_PATH
, хитрость хочет автокомпилировать программу в мой HOME-кэш (и это именно то, чего я хочу избежать и почему я спрашиваю).
Пример:
PATH=$PWD GUILE_LOAD_COMPILED_PATH=$PWD prog
# => auto-compiles :(
Пока эти случаи работают (ок, но почему?):
PATH=. GUILE_LOAD_COMPILED_PATH=. prog
# works
PATH=. GUILE_LOAD_COMPILED_PATH=$PWD prog
# works
Кажется проблема возникает, когда прогу нужно искать по PATH? Похоже на ошибку?
PATH=$PWD GUILE_LOAD_COMPILED_PATH=$PWD prog
Это автоматически компилируется, потому что ваша оболочка использует абсолютный путь к prog
при запуске скрипта (как правило, путь, созданный путем соединения каталога $PATH
и имени команды), а Guile ищет этот путь в %load-compiled-path список. Таким образом, если ваш текущий рабочий каталог — /home/bob/bin
, он будет искать /home/bob/bin/home/bob/bin/prog.go
, которого не существует. Когда PATH
и GUILE_LOAD_COMPILED_PATH
— это просто .
, он будет искать /home/bob/bin/prog.go
, который действительно существует.
Примечание. В идеале вы должны поместить скомпилированные файлы в путь, начинающийся с каталога, возвращаемого (%site-ccache-dir), чтобы вам не приходилось возиться с настройкой переменной среды, указывающей на пользовательское местоположение. .
Спасибо!!! Теперь я обнаружил, что мой третий рабочий пример
GUILE_LOAD_COMPILED_PATH=$PWD $PWD/prog
на самом деле тоже не работает, поэтому я удалил его из поста, чтобы не запутать кого-то еще. Ваше объяснение проясняет ситуацию.