2010-06-01 28 views
34

¿Cuál sería la forma más fácil de compilar un simple script en Perl para un ejecutable bajo Windows con fresa Perl (como entiendo que es posible y libre)?¿Cómo compilar un script de Perl para un ejecutable de Windows con Strawberry Perl?

En el pasado he utilizado ActiveState compilador y perl2exe y era bastante simple. Sin embargo, ahora después de algunos cambios en la computadora y actualizaciones del sistema operativo, he perdido las licencias y me gustaría encontrar una solución mejor/permanente.

+0

duplicados http://stackoverflow.com/questions/1237286 y http://stackoverflow.com/questions/446685 – daxim

+0

posible duplicado de [¿Cómo puedo implementar un script de Perl/Python/Ruby sin instalar un intérprete?] (http://stackoverflow.com/questions/446685/how-can-i-deploy-a-perl-python-ruby-script -sin-instalar-an-intérprete) –

Respuesta

27

Instalar PAR::Packer from CPAN (it is free) y utilizar la utilidad pp.

+2

instrucciones aquí: http://n3ncy.com/PERL/ y aquí: http://stackoverflow.com/questions/1237286/how-can-i-compile-my-perl- script-so-it-can-be-executed-on-systems-without-perl-in/124137 9 # 1241379 – Notitze

+4

Nota: PAR :: Packer/pp viene con un manual: http://search.cpan.org/perldoc?pp Para una descripción general bastante detallada de lo que puede hacer con PAR, eche un vistazo a mi hablar de YAPC :: UE 2008 http://steffen-mueller.net/talks/appdeployment/ – tsee

+0

Esto no parece funcionar para mí http://stackoverflow.com/questions/9588100/installing-parpacker-on-windows -dmake-error-255 –

5

Hay tres empaquetadores, y dos compiladores:

empaquetador libre: PAR
empaquetadores comerciales: perl2exe, PerlApp
compiladores: B :: C, B :: CC

http://search.cpan.org/dist/B-C/perlcompile.pod

(Nota: perlfaq3 sigue siendo incorrecto)

Para fresa usted necesita perl-5.16 y B-C desde git master (1.43), ya que B-C-1.42 no es compatible con 5.16.

1

Este es un ejemplo paso a paso, se utiliza la fresa y funciona !! Se basa en ExtUtils :: módulo Insertar y perlembed documentación

http://perl-node-interface.blogspot.com/2011/03/deploy-perl-application-on-windows.html

+2

Nota: Este ejemplo usa ExtUtils :: Embed. Intenté seguir las instrucciones, pero no todos los archivos se mostraron completamente en el ejemplo, y no pude lograr que funcionara. Por el contrario, el ejemplo "pp" usando PAR :: Packer fue muy, muy simple, y funcionó por primera vez. De acuerdo con mi experiencia, tendría que recomendar PAR :: Packer y pp. –

13
:: 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 
+1

¿Qué tipo de sintaxis es esa? –

+0

windows cmd/batch –

Cuestiones relacionadas