Możesz korzystać albo z IDE (np. Lazarus) albo z edytora tekstu (chociażby wspomnianego już Kate czy Geany).
To co Ciebie interesuje to kompilacja skrośna (cross-compilation). Stosowne informacje znajdziesz na wiki projektu freepascal (http://wiki.freepascal.org/Cross_compiling) oraz wiki projektu Lazarus (http://wiki.lazarus.freepascal.org/Cross_compiling_for_Win32_under_Linux).
Konieczne może okazać się również doinstalowanie mingw32 (i/lub mingw64 jeśli zależy Ci na kompilacji pod Win64).
Do uruchamiania programów możesz wykorzystać wine/wineconsole (http://www.winehq.org/docs/wineusr-guide/cui-programs).
Ewentualnie możesz spróbować używać środowiska Lazarus pod WINE (http://appdb.winehq.org/objectManager.php?sClass=application&iId=1733).
Przykładowy program
Aby stworzyć konsolową aplikację w Lazarusie należy z menu File wybrać New .... W nowo otwartym oknie z opcji które nas interesują mamy do wyboru Program oraz Console application. W tym drugim przypadku dostaniemy na start bardziej rozbudowany kod z m. in. obsługą przełączników i wyświetlaniem pomocy. Dla prostych programów konsolowych w zupełności wystarczy pierwsza opcja.
Przykładowy program Hello World:
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
begin
WriteLn('Hello World!');
ReadLn;
end.
wklejka (http://wklej.org/hash/4df9282583a/?hl=delphi)
Korzystając z linuksowej wersji Lazarusa (po uprzednim skonfigurowaniu FPC zgodnie z powyższymi wskazówkami) wystarczy w opcjach projektu wybrać docelową platformę i architekturę. W naszym przypadku są to odpowiednio Win32 i i386.
(http://wstaw.org/m/2013/12/30/Options_for_Project.png)
Options for Project: project1 (http://wstaw.org/m/2013/12/30/Options_for_Project.png)
Od tego momentu w ramach danego projektu będą budowane binaria EXE PE dla Windows zamiast natywnych ELF dla Linuksa:
$ file project1.exe
project1.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
Taki program możemy uruchomić przy użyciu wine:
$ wine project1.exe
Hello World!
Można także użyć wineconsole:
$ wineconsole project1.exe
(http://wstaw.org/m/2013/12/30/wineconsole_project1.png)
wineconsole project1.exe (http://wstaw.org/m/2013/12/30/wineconsole_project1.png)
Oczywiście nic nie stoi na przeszkodzie, żeby kompilować kod ręcznie:
$ fpc -MObjFPC -Scgi -O1 -Twin32 -Pi386 -g -gl -vewnhi -Fu. -l project1.lpr
Hint: Start of reading config file /etc/fpc.cfg
Hint: End of reading config file /etc/fpc.cfg
Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling project1.lpr
Compiling resource /home/alvaro/apps/fpc_helloworld/project1.rc
Compiling resource project1.or
Linking project1.exe
18 lines compiled, 0.2 sec , 141136 bytes code, 27532 bytes data
2 hint(s) issued
wklejka (http://wklej.org/hash/2fb774ac2e8/txt/)
Lazarus jest bardzo podobnym IDE do Delphi, ale jeśli wolisz inne środowisko programistyczne czy edytor tekstu to nie ma sensu się męczyć z nim na siłę.
Poniższe polecenie powinno zwrócić informację, że pakiet fp-ide wymaga fp-ide-2.6.2:
Jakie pliki zostały zainstalowane przez pakiet fp-ide-2.6.2 możesz sprawdzić poleceniem:
Jak łatwo zauważyć program którego szukasz kryje się pod nazwą fp.
Możesz sobie utworzyć skrót w menu. W tym celu stwórz odpowiedni plik *.desktop, np. /usr/share/applications/fp-ide.desktop czy ~/.local/share/applications/fp-ide.desktop o następującej treści:
[Desktop Entry]
Encoding=UTF-8
Name=FP IDE
Comment=FP IDE 2.6.2
Exec=fp
#Icon=lazarus
Terminal=true
Type=Application
Categories=Application;Development;
StartupNotify=true
Oczywiście możesz do tego celu użyć jakiegoś edytora menu, np. alacarte.
Zamiast tworzyć aktywator w menu możesz utworzyć go na pulpicie (~/Desktop/fp-ide.desktop).
Plik wynikowy
Jesteś pewna, że udało Ci się zbudować pliki wynikowe EXE?
To, że pliki mają rozszerzenie exe nie oznacza, że są to programy EXE PE dla Windows.
Najlepiej upewnij się i sprawdź typ pliku wynikowego za pomocą polecenia file:
Jeśli zwrócić coś w poniższym stylu to masz do czynienia z programem dla Windows.
program.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
Jeśli jednak otrzymasz wynik taki jak poniżej to znaczy, że otrzymałaś binarkę ELF dla systemu Linux.
program.exe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, for GNU/Linux 2.4.0, stripped
@alvaro: Dzięki za zwrócenie uwagi, bo pokazuje się to drugie. Szukałam wczoraj, czy można coś z tym zrobić i doszłam do wniosku, że jak będę brała program do szkoły, to wezmę plik .pas, który skompiluję na miejscu, bo jeśli dobrze myślę, wtedy powinien się utworzyć windowsowy plik .exe. Chyba, że źle myślę.
W ostateczności mogę brać pendrive'a z LiveCD albo poszukać w pracowni komputera z Linuxem (bywały takie).
Możesz tworzyć programy dla systemu Windows pod Linuksem. Służy do tego kompilacja skrośna. Pisałem o tym w pierwszym moim komentarzu w tym wątku (dziesiątym od góry).
Kompilacja skrośna
Jak już wcześniej wspomniałem, szczegółowe informacje znajdziesz na wiki projektu freepascal (http://wiki.freepascal.org/Cross_compiling) oraz wiki projektu Lazarus (http://wiki.lazarus.freepascal.org/Cross_compiling_for_Win32_under_Linux).
Postaram się w możliwie prosty sposób przybliżyć cały proces konfiguracji na dystrybucjach bazujących na Ubuntu, w szczególności Kubuntu.
Żeby nie wprowadzać zamieszania zalecam korzystać z pakietów dostępnych na stronie projektu Lazarus na sf.net (http://sourceforge.net/projects/lazarus/files/) zamiast tych dostępnych w repozytoriach danej dystrybucji.
Z tego powodu radzę usunąć najpierw dotychczas zainstalowane pakiety:
sudo apt-get remove fpc fpc-source lazarus
Zanim będziemy kontynuować najlepiej zaktualizujmy system:
sudo apt-get update
sudo apt-get upgrade
Możliwe, że zajdzie konieczność zainstalowania dodatkowych zależności (np. libgtk2.0-dev).
Możemy to zrobić już teraz:
sudo apt-get install libgtk2.0-dev
Wróćmy do FPC.
Odpowiednie paczki DEB można znaleźć na wspomnianej już stronie:
- dla systemu 32-bitowego (http://sourceforge.net/projects/lazarus/files/Lazarus Linux i386 DEB/Lazarus 1.0.14/)
- dla systemu 64-bitowego (http://sourceforge.net/projects/lazarus/files/Lazarus Linux amd64 DEB/Lazarus 1.0.14/)
Załóżmy, że mamy system 32-bitowy.
Pobieramy (np. za pomocą wget) obowiązkowo pakiety fpc_2.6.2-0_i386.deb (http://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%201.0.14/fpc_2.6.2-0_i386.deb/download) i fpc-src_2.6.2-0_i386.deb (http://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%201.0.14/fpc-src_2.6.2-0_i386.deb/download) oraz opcjonalnie pakiet lazarus_1.0.14-0_i386.deb (http://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%201.0.14/lazarus_1.0.14-0_i386.deb/download).
Następnie instalujemy pobrane wcześniej paczki:
sudo dpkg -i fpc_2.6.2-0_i386.deb fpc-src_2.6.2-0_i386.deb lazarus_1.0.14-0_i386.deb
Musimy sprawdzić gdzie zainstalowały się źródła:
$ dpkg -L fpc-src | head
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/fpc-src
/usr/share/doc/fpc-src/changelog.Debian.gz
/usr/share/doc/fpc-src/copyright
/usr/share/doc/fpc-src/changelog.gz
/usr/share/fpcsrc
/usr/share/fpcsrc/2.6.2
Przejdźmy do odpowiedniego katalogu:
cd /usr/share/fpcsrc/2.6.2
Powinien znajdować się tam plik Makefile:
$ ls /usr/share/fpcsrc/2.6.2
compiler ide installer Makefile Makefile.fpc packages rtl tests utils
Cały czas będąc w tym katalogu wykonajmy kolejno:
sudo make all OS_TARGET=win32 CPU_TARGET=i386
a następnie:
sudo make crossinstall OS_TARGET=win32 CPU_TARGET=i386
Musimy jeszcze edytować plik /etc/fpc.cfg.
Dla bezpieczeństwa utwórzmy najpierw jego kopię:
sudo cp /etc/fpc.cfg /etc/fpc.cfg.bak
Edytujemy go za pomocą np. nano:
Musimy zamienić następujące trzy linie:
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
na poniższe:
#-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
#-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
#-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
#IFDEF win32
-Fu/usr/local/lib/fpc/$fpcversion/units/i386-win32/
-Fu/usr/local/lib/fpc/$fpcversion/units/i386-win32/*
-Fu/usr/local/lib/fpc/$fpcversion/units/i386-win32/rtl
-XPi686-mingw32-
-FD/usr/local/lib/fpc/$fpcversion
#ELSE linux
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
#-Fu~/fpc/packages/*;~/fpc/rtl/linux
#ENDIF
/etc/fpc.cfg (http://wklej.org/hash/04a658bf52c/txt/)
W tym momencie zyskujemy możliwość kompilacji skrośnej za pomocą fpc.
Zamiast tworzyć binarkę ELF dla systemu Linux można - podając przełączniki -Twin32 -Pi386 - utworzyć plik wykonywalny EXE PE dla systemu Windows (32-bit):
$ fpc -Twin32 -Pi386 project1.pas
Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling project1.pas
Linking project1.exe
16 lines compiled, 0.2 sec , 134128 bytes code, 27356 bytes data
$ file project1.exe
project1.exe: PE32 executable (console) Intel 80386 (stripped to external PDB), for MS Windows
$ fpc -MObjFPC -Scghi -O1 -Twin32 -Pi386 -g -gl -vewnhi -Fu. -l project1.pas
int: Start of reading config file /etc/fpc.cfg
Hint: End of reading config file /etc/fpc.cfg
Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling project1.pas
Linking project1.exe
16 lines compiled, 0.2 sec , 141136 bytes code, 27532 bytes data
2 hint(s) issued
$ file project1.exe
project1.exe: PE32 executable (console) Intel 80386, for MS Windows
Geany
Jeśli nie chcesz używać rozbudowanego IDE takiego jak Lazarus to możesz korzystać chociażby z Geany.
Radzę do niego doinstalować dodatkowe wtyczki:
sudo apt-get install geany geany-plugins
Możesz ustawić odpowiednie opcje kompilacji w tym edytorze.
W tym celu mając otwarty plik źródłowy *.pas z menu Build wybierz Set Builds Commands.
W nowo otwartym oknie w polu Compile zamień:
na:
(http://wstaw.org/m/2014/01/03/set_build_commands_compile.png)
Od tego momentu będziesz mogła w prosty sposób budować program dla Windows wybierając opcję kompilacji z poziomu Geany (domyślnie wciskając po prostu F8).