有哪种最简单的方式可以使用Strawberry Perl将一个简单的Perl脚本编译为可执行文件在Windows下(据我所知,这是可能且免费的)?
在过去,我使用ActiveState编译器和perl2exe,这很简单。然而,现在经过几次计算机更改和操作系统更新后,我失去了许可证,我想找到一个更好/永久的解决方案。
有哪种最简单的方式可以使用Strawberry Perl将一个简单的Perl脚本编译为可执行文件在Windows下(据我所知,这是可能且免费的)?
在过去,我使用ActiveState编译器和perl2exe,这很简单。然而,现在经过几次计算机更改和操作系统更新后,我失去了许可证,我想找到一个更好/永久的解决方案。
从CPAN安装PAR::Packer(它是免费的)并使用pp实用程序。
:: short answer :
:: perl -MCPAN -e "install PAR::Packer"
pp -o <<DesiredExeName>>.exe <<MyFancyPerlScript>>
:: long answer - create the following cmd , adjust vars to your taste ...
:: next_line_is_templatized
:: file:compile-morphus.1.2.3.dev.ysg.cmd v1.0.0
:: disable the echo
@echo off
:: this is part of the name of the file - not used
set _Action=run
:: the name of the Product next_line_is_templatized
set _ProductName=morphus
:: the version of the current Product next_line_is_templatized
set _ProductVersion=1.2.3
:: could be dev , test , dev , prod next_line_is_templatized
set _ProductType=dev
:: who owns this Product / environment next_line_is_templatized
set _ProductOwner=ysg
:: identifies an instance of the tool ( new instance for this version could be created by simply changing the owner )
set _EnvironmentName=%_ProductName%.%_ProductVersion%.%_ProductType%.%_ProductOwner%
:: go the run dir
cd %~dp0
:: do 4 times going up
for /L %%i in (1,1,5) do pushd ..
:: The BaseDir is 4 dirs up than the run dir
set _ProductBaseDir=%CD%
:: debug echo BEFORE _ProductBaseDir is %_ProductBaseDir%
:: remove the trailing \
IF %_ProductBaseDir:~-1%==\ SET _ProductBaseDir=%_ProductBaseDir:~0,-1%
:: debug echo AFTER _ProductBaseDir is %_ProductBaseDir%
:: debug pause
:: The version directory of the Product
set _ProductVersionDir=%_ProductBaseDir%\%_ProductName%\%_EnvironmentName%
:: the dir under which all the perl scripts are placed
set _ProductVersionPerlDir=%_ProductVersionDir%\sfw\perl
:: The Perl script performing all the tasks
set _PerlScript=%_ProductVersionPerlDir%\%_Action%_%_ProductName%.pl
:: where the log events are stored
set _RunLog=%_ProductVersionDir%\data\log\compile-%_ProductName%.cmd.log
:: define a favorite editor
set _MyEditor=textpad
ECHO Check the variables
set _
:: debug PAUSE
:: truncate the run log
echo date is %date% time is %time% > %_RunLog%
:: uncomment this to debug all the vars
:: debug set >> %_RunLog%
:: for each perl pm and or pl file to check syntax and with output to logs
for /f %%i in ('dir %_ProductVersionPerlDir%\*.pl /s /b /a-d' ) do echo %%i >> %_RunLog%&perl -wc %%i | tee -a %_RunLog% 2>&1
:: for each perl pm and or pl file to check syntax and with output to logs
for /f %%i in ('dir %_ProductVersionPerlDir%\*.pm /s /b /a-d' ) do echo %%i >> %_RunLog%&perl -wc %%i | tee -a %_RunLog% 2>&1
:: now open the run log
cmd /c start /max %_MyEditor% %_RunLog%
:: this is the call without debugging
:: old
echo CFPoint1 OK The run cmd script %0 is executed >> %_RunLog%
echo CFPoint2 OK compile the exe file STDOUT and STDERR to a single _RunLog file >> %_RunLog%
cd %_ProductVersionPerlDir%
pp -o %_Action%_%_ProductName%.exe %_PerlScript% | tee -a %_RunLog% 2>&1
:: open the run log
cmd /c start /max %_MyEditor% %_RunLog%
:: uncomment this line to wait for 5 seconds
:: ping localhost -n 5
:: uncomment this line to see what is happening
:: PAUSE
::
:::::::
:: Purpose:
:: To compile every *.pl file into *.exe file under a folder
:::::::
:: Requirements :
:: perl , pp , win gnu utils tee
:: perl -MCPAN -e "install PAR::Packer"
:: text editor supporting <<textEditor>> <<FileNameToOpen>> cmd call syntax
:::::::
:: VersionHistory
:: 1.0.0 --- 2012-06-23 12:05:45 --- ysg --- Initial creation from run_morphus.cmd
:::::::
:: eof file:compile-morphus.1.2.3.dev.ysg.cmd v1.0.0
有三种打包工具和两种编译器:
免费的打包工具:PAR
商业化的打包工具:perl2exe、perlapp
编译器:B::C、B::CC
http://search.cpan.org/dist/B-C/perlcompile.pod
(注意:perlfaq3仍然是错误的)
对于Strawberry,您需要perl-5.16和来自git主干的B-C(1.43),因为B-C-1.42不支持5.16。
BoxedApp Packer
我在网上找到了这个应用程序,它可以很好地处理小的Perl文件(Pl和PM),但对于大型库文件来说可能不太适合 :(https://www.boxedapp.com/boxedapppacker/usecases/pack_perl_script_into_single_exe.html
如果有人有关于在Windows上使用PAR::Packer的教程,我已经安装了Perl Strawberry - Active State和Par Packer,但我只找到了将一个Perl文件转换为exe文件的方法。
pp -o example.exe example.pl
我需要将main_project_file.pl文件和所有相关的lib related.pm模块文件转换为一个exe文件,使用PAR::Packer在Windows上实现。