На самом деле, MakeMaker.pm
разбивается на пробелы, но не на все пробелы. Не могли бы вы использовать вкладки?
export PERL_MM_OPT='LIBS="-L/usr/sfw/lib<kbd>Tab</kbd>-lssl<kbd>Tab</kbd>-lcrypto" INC=/usr/sfw/include
Я думаю, что вы установили переменные окружения с помощью табуляции в порядке - это команда echo
, которая конвертирует табуляции в пробелы:
$ VAR='abc^Idef'
$ echo $VAR | od -c
0000000 a b c d e f \n
0000010
Похоже, это не сработало. Но подождите:
$ export VAR
$ perl -e 'print $ENV{VAR}' | od -c
0000000 a b c \t d e f
0000007
Это все еще может работать или не работать в ExtUtils::MakeMaker
в зависимости от того, как параметры в $ENV{PERL_MM_OPT}
передаются в подпроцесс (через system
, exec
, open |
и т. Д.):
system("gcc helloworld.c -lssl\t-lcrypto\t-L/usr/sfw/lib") ### 1 ###
system("gcc", "helloworld.c", "-lssl\t-lcrypto\t-L/usr/sfw/lib") ### 2 ###
Системный вызов
будет работать, потому что когда у вызова system
есть один аргумент с метасимволами, он передает команду в оболочку. Оболочка будет правильно анализировать аргументы.
системный вызов 2 завершается ошибкой, потому что multi-arg system
всегда обходит оболочку, а gcc
застревает, ища библиотеку с маловероятным именем "libssl^I-lcrypto^I-L/usf/sfw/lib.a"
. Если ExtUtils::MakeMaker
использует этот стиль вызова для запуска компилятора, то этот обходной путь не выполнит работу.