2010-06-01 44 views
34

Cách đơn giản nhất để biên dịch một kịch bản Perl đơn giản thành một tệp thực thi trong Windows với Strawberry Perl (như tôi hiểu là có thể và miễn phí)?Làm cách nào để biên dịch tập lệnh Perl sang tệp thực thi Windows với Strawberry Perl?

Trong quá khứ tôi đã sử dụng trình biên dịch ActiveState và perl2exe và đủ đơn giản. Tuy nhiên, bây giờ sau khi một vài thay đổi máy tính và cập nhật hệ điều hành tôi đã mất giấy phép và tôi muốn tìm một giải pháp tốt hơn/vĩnh viễn.

+0

giá trị nhân bản http://stackoverflow.com/questions/1237286 và http://stackoverflow.com/questions/446685 – daxim

+0

thể bản sao của [Làm thế nào tôi có thể triển khai một kịch bản Perl/Python/Ruby mà không cần cài đặt một thông dịch viên?] (http://stackoverflow.com/questions/446685/how-can-i-deploy-a-perl-python-ruby-script -Without-installation-an-interpreter) –

Trả lời

27

Cài đặt PAR::Packer from CPAN (it is free) và sử dụng tiện ích trang.

+2

Hướng dẫn tại đây: http://n3ncy.com/PERL/ và tại đây: http://stackoverflow.com/questions/1237286/how-can-i-compile-my-perl- script-so-it-can-be-execute-on-systems-không-perl-in/124137 9 # 1241379 – Notitze

+4

Lưu ý: PAR :: Trình đóng gói/trang đi kèm với hướng dẫn: http://search.cpan.org/perldoc?pp Để có cái nhìn tổng quan sâu sắc về những gì bạn có thể làm với PAR, hãy xem nói chuyện từ YAPC :: EU 2008 http://steffen-mueller.net/talks/appdeployment/ – tsee

+0

Điều này dường như không hiệu quả đối với tôi http://stackoverflow.com/questions/9588100/installing-parpacker-on-windows -dmake-error-255 –

5

Có ba đóng gói, và hai trình biên dịch:

đóng gói miễn phí: PAR
đóng gói thương mại: perl2exe, PerlApp
trình biên dịch: B :: C, B :: CC

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

(Lưu ý: perlfaq3 vẫn sai)

Cho dâu tây bạn cần perl-5.16 và B-C từ git master (1.43), vì B-C-1.42 không hỗ trợ 5.16.

1

Đây là một ví dụ từng bước, nó sử dụng Strawberry và nó hoạt động !! Nó dựa trên ExtUtils :: Module Nhúng và perlembed tài liệu

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

+2

Lưu ý: Ví dụ này sử dụng ExtUtils :: Nhúng. Tôi đã cố làm theo hướng dẫn, nhưng không phải tất cả các tệp đều được hiển thị đầy đủ trong ví dụ và tôi không thể quản lý công việc đó. Ngược lại, ví dụ "pp" sử dụng PAR :: Packer rất, rất đơn giản và làm việc lần đầu tiên. Dựa trên kinh nghiệm của tôi, tôi sẽ phải giới thiệu PAR :: Packer và trang –

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

loại cú pháp nào? –

+0

windows cmd/batch –

Các vấn đề liên quan