我正在尝试自己构建Win32::Daemon。我不使用 CPAN 的原因是因为我想更深入地研究 Perl 模块的工作。最后,我希望通过看到这个工作(在这里不重要)来解决另一个问题。
我会看到 3 个选项来构建模块:cygwin、mingw、microsoft compiler (cl)
在 MinGW 上,它报告它不受支持(如果在 Makefile.PL 中很简单),一旦我修改检查以匹配 MinGW,它会扩展为更多tchar.h
错误有它)。
但无论如何,我的真正目标是使用 MS 编译器构建它,所以虽然任何不需要任何特殊库的编译(就像我想的 cygwin 一样)会更多。
所以现在我的 nmake 输出从运行开始name /f Makefile
:
NMAKE : fatal error U1073: "C:/Program" could not be created.
Stop.
我粗略地翻译了德语的错误信息,但陈述很简单。我在这里看到的似乎是路径问题(可能是空格)。我还注意到正斜杠。由脚本Makefile
创建Makefile.PL
(我使用的是 Active Perl v5.12.1):
use strict;
use warnings;
use Config qw(%Config);
use ExtUtils::MakeMaker;
unless ($^O eq "MSWin32" || $^O eq "cygwin") {
die "OS unsupported\n";
}
require Win32;
my %param = (
NAME => 'Win32::Daemon',
VERSION_FROM => 'Daemon.pm',
DEFINE => '-DPERL_NO_GET_CONTEXT',
OBJECT => 'CCallbackList$(OBJ_EXT) CCallbackTimer$(OBJ_EXT) Constant$(OBJ_EXT) CWinStation$(OBJ_EXT) Daemon$(OBJ_EXT) ServiceThread$(OBJ_EXT)',
XS => { 'Daemon.xs' => 'Daemon.cpp' },
);
$param{INC} .= ' -EHsc' if $Config{'cc'} =~ /^cl/i;
$param{NO_META} = 1 if eval "$ExtUtils::MakeMaker::VERSION" >= 6.10_03;
WriteMakefile(%param);
sub MY::xs_c {
'
.xs.cpp:
$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs >xstmp.c && $(MV) xstmp.c $*.cpp
';
}
我对 MakeMaker 了解不多,但我在这里看不到任何我可以修复的东西,并且希望它归结为Makefile
手动修复本身。我尝试了一些事情,比如引用,但没有任何帮助。
问题是,在 Windows 上构建时,我已经习惯了这样的问题,但通常这是针对为 Unix 创建的工具。这个明确地只有 Windows,所以我希望它可以开箱即用。所以我认为我做错了什么。
关于在哪里找到解决方案的任何帮助?提前致谢。
编辑/添加:我在另一台装有 Active Perl 5.16.x 的 Win7 机器上试过这个,它就像一个魅力。我查看了这台机器的不同输出和当前运行时失败perl Makefile.PL
的输出,我收到以下输出:
... Detected uninstalled Perl. Trying to continue.
Unable to find a perl 5 (by these names: C:\Program Files\Perl64\bin\perl.exe perl.exe perl5.exe perl5.12.1.exe miniperl.exe, in these dirs: . [...] C:\Program Files\Perl64\site\bin C:\Program Files\Perl64\bin [...])
Have \progra~1\perl64\lib
Want \temp\perl---please-run-the-install-script---\lib
Writing Makefile for Win32::Daemon
我截断了输出。现在请有人向我解释一下:为什么我可以运行perl Makefile.PL
,或者perl -v
它没有在它所在的确切目录中找到我的 Perl?我重新安装了它,但它没有工作......