Как изменить строку переменной в скриптах / модулях при использовании ExtUtils :: MakeMaker - PullRequest
0 голосов
/ 24 марта 2011

У меня есть несколько модулей и скриптов в приложении, написанном на Perl. Для его распространения я использую ExtUtils::MakeMaker.

Целевая ОС для модулей и скриптов - Linux. Дело в том, что я ожидаю, что конечные пользователи установят модули / скрипты в нестандартные каталоги и, возможно, в свои собственные каталоги, а затем установят как:

perl Makefile.PL PREFIX='/YOUR/DIRECTORY'
make
make test
make install

ExtUtils::MakeMaker решает проблему, когда каталог установки модулей / скриптов не является стандартным и переменным PREFIX.

Как я могу скопировать или заменить значение PREFIX string 'в сценарии? например, вместо жесткого кода:

use lib '/YOUR/DIRECTORY';

Я бы хотел заменить его на такой шаблон, как:

use lib '%%PREFIX%%';

, где %%PREFIX%% заменяется во время «компиляции» и без установки переменной окружения ($ENV{'PREFIX'})

Спасибо за ваши ответы !!

1 Ответ

2 голосов
/ 24 марта 2011

Что нужно использовать, так это PM_FILTER:

if (!($^O eq 'MSWin32' || $Config{'ccflags'} =~ /-D_?WIN32_?/)) {
    # doesn't work on windows: no sed
    $opts{'PM_FILTER'} = 'sed -e "s|/usr/share|$(PREFIX)/share|"';
}

, который работает на linux и почти во всем, кроме окон (как вы можете видеть в комментариях).

[Обновлен, чтобы включить больше деталей об использовании:]

use ExtUtils::MakeMaker;

%opts = (
     'NAME'         => 'myModulesAndScripts',
     # ...
    );

if (!($^O eq 'MSWin32' || $Config{'ccflags'} =~ /-D_?WIN32_?/)) {
    # doesn't work on windows: no sed
    $opts{'PM_FILTER'} = 'sed -e "s|/usr/share|$(PREFIX)/share|"';
}

WriteMakefile(%opts);

(и, как указано в комментариях, вы можете попытаться вызвать perl в PM_FILTER, так что вам не нужна проверка окон;В моем примере выше, однако, я обнаружил случаи, когда perl не было в пути exec, и существующий путь PREFIX / usr уже был в порядке ... Вы можете определить PM_FILTER непосредственно в обычном списке аргументов WriteMakefileесли хочешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...