我正在持續集成構建服務器中構建 DBI 和 DBD::mysql。DBI 的構建成功,如下面的構建日志摘錄所示。它清楚地將 DBI/DBD.pm 安裝在正確的位置。
pushd DBI-1.643
perl Makefile.PL INSTALL_BASE=/data/pods/mysql-tools/mysql-tools/current
...
Installing /data/pods/mysql-tools/mysql-tools/current/lib/perl5/x86_64-linux-thread-multi/DBI/DBD.pm
...
Appending installation info to /data/pods/mysql-tools/mysql-tools/current/lib/perl5/x86_64-linux-thread-multi/perllocal.pod
但是 DBD::mysql 構建的下一部分失敗了,因為它找不到 DBI 安裝的檔案。
pushd DBD-mysql-4.050
perl Makefile.PL INSTALL_BASE=/data/pods/mysql-tools/mysql-tools/current --ssl
Can't locate DBI/DBD.pm in @INC (@INC contains:
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5 .)
at Makefile.PL line 15.
您可以看到,用于 DBD::mysql 的 MakeMaker 根本沒有向其添加安裝位置@INC。它只有默認目錄。
有沒有辦法將引數傳遞給 MakeMaker 以將安裝目錄添加到@INC?我想我可以對其進行硬編碼,但這似乎不合適且難以維護。有沒有更好的方法來自動添加INSTALL_BASE/lib/perl5/<arch>到@INC?
環境:
- CentOS 7 Linux
- Perl 5.16.3
我當然更喜歡使用 cpanm。但是由于我雇主的安全政策,CI 構建服務器與 Internet 隔離。CI 不允許使用 http 代理。
uj5u.com熱心網友回復:
根據檔案,INSTALL_BASE用于告訴make install將安裝的模塊放在哪里:
INSTALL_BASE
INSTALL_BASE可以傳入Makefile.PL以更改模塊的安裝位置。INSTALL_BASE更像是其他人所說的“前綴”PREFIX。
但它沒有告訴perl在哪里尋找已安裝的模塊。為此,您可以PERL5LIB根據檔案使用環境變數:
PERL5庫
在查找標準庫之前查找 Perl 庫檔案的目錄串列。任何結構特異性和特定版本的目錄,例如
version/archname/,version/或者archname/如果它們存在,這種查找在翻譯的啟動時間做下的指定位置會自動包含。此外,還會添加與 中的條目匹配的任何目錄$Config{inc_version_list}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316269.html
上一篇:從后往上讀取日志檔案-perl
