cpanm 使用自定义库和 cflags

Rec*_*ker 5 perl cpan xml-libxml cpanm

在我的 mac OS X 机器上Darwin maci 15.6.0 Darwin Kernel Version 15.6.0

我已在以下自定义目录中安装了 libxml2 和 libxslt

/usr/local/MyLibs/libxml2-2.9.2

和 libxslt

/usr/local/MyLibs/libxslt-1.1.29

现在我想使用这些库来构建我的 CPANM 模块XML::LibXSLT

告诉我我可以使用--configure-args(它仍然是实验性的)来做到这一点。所以我做了类似的事情,

cpanm http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/XML-LibXSLT-1.94.tar.gz --configure-args="--cflags=-I/usr/local/libxslt-1.1.29/include -I/usr/include/libxml2 -I/usr/local/MyLibs/libxml2-2.9.2/include/libxml2 --libs=-L/usr/local/libxslt-1.1.29/lib -lxslt -lxml2 -lz -lpthread -licucore -lm -L/usr/local/MyLibs/libxml2-2.9.2/lib -lxml2 -lz -lpthread -liconv -lm" --force
Run Code Online (Sandbox Code Playgroud)

但是,构建日志表明它没有使用我的自定义位置中安装的库。

我是否有什么做得不正确的地方?

chr*_*hvz 6

我认为您在参数周围缺少引号--cflags(需要将多个空格分隔的参数组合在一起):

\n\n
--configure-args="--cflags=\'-I/usr/local/libxslt-1.1.29/include -I/usr/include/libxml2 -I/usr/local/MyLibs/libxml2-2.9.2/include/libxml2\'"\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而--cflags, 和--libs只是 cpanm 文档中的示例,甚至可能无法被发行版的 Makefile.PL 识别。正如另一个答案指出的那样,用于 XML::LibXSLT 的参数是INC="\xe2\x80\xa6"LIBS="\xe2\x80\xa6";我认为向 cpanm 提供这些--configure-args应该可行:

\n\n
cpanm --configure-args="INC=\'\xe2\x80\xa6\' LIBS=\'\xe2\x80\xa6\'"\n
Run Code Online (Sandbox Code Playgroud)\n


ike*_*ami 5

从发行版的自述文件中,

Makefile.PL 尝试使用 pkg-config 和 xslt-config 为其库依赖项确定正确的编译器和链接器标志。如果失败,您可以像这样覆盖这些值

perl Makefile.PL INC="..." LIBS="..."
Run Code Online (Sandbox Code Playgroud)

其中 INC 包含编译器标志(例如 -I/some_path/include 等),LIBS 包含链接器标志(例如 -L/some_path/lib -llibsomething ...)。

cpanm放弃并自己安装该模块可能会更简单。

curl -L -o - http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/XML-LibXSLT-1.95.tar.gz | tar xz
cd XML-LibXSLT-1.95
perl Makefile.PL INC="..." LIBS="..."
make test
make install
Run Code Online (Sandbox Code Playgroud)