Pascal 日和 ホームページ

カウンター








ソースネクスト

GNU Pascal の設定(MinGW版)



GNU Pascal のインストールと設定(MinGW版)




 事前に、「共通設定」ページと「MinGWの設定」を参照してください。


 (MinGWはGNU Pascal用のバージョンではなく、最新バージョンで対応)





 GNU Pascal は Pascal コンパイラの一つです。
 GNU Pascal のWebサイトはこちらです ⇒ http://www.gnu-pascal.de/

 GNU Pascal は、GNU Compiler Collection(GCC)の一つで、Cコンパイラ(gcc) をコード生成のバックエンドとした Pascal のフロントエンドとなります。C言語へのコンバータではなく、Pascal言語を直接コンパイルして実行ファイルを作成します。
 GNU Pascal は、GNU General Public License のもとに使用できます。

 Windowsでは、GCCを提供する環境にCygwin(POSIX環境)とMinGW(Windows環境)がありますが、ここではMinGWを使用します。MinGWには、MSYSというMinGWを補うPOSIXのCUIコマンドを用意したものがあり、MinGW + MSYS で、Unix/Linux に近い操作ができます。makefile などは Unix/Linux 互換性の高い記述ができます。
 MinGW/MSYS のWebサイトはこちらです ⇒ http://www.mingw.org/

 MinGW/MSYS や GNU Pascal はWebサイトでバイナリーファイルが提供されていもので、ソースから構築する必要はありません。



GNU Pascalの入手とインストール


 GNU Pascal for Win32 (MinGW) は、インストーラではなく、アーカイブファイルで提供されます。このアーカイブファイルを MinGW をインストールした「C:\GPC」に重ねて展開します。

 以下のURLを開いてダウンロードサイトを開きます。

 ダウンロードサイトのURL ⇒ http://www.gnu-pascal.de/binary/mingw32/

 最新安定版「GPC  Snapshot and release (Stable)」のアーカイブを展開します。
 MinGW の設定 gcc 3.4.5 のインストールも行ったので、GNU Pascalのみの「gpc-20070904.i386-pc-mingw32.tar.gz」をクリックし、「C:\PG\GNUPascal」にダウンロードします。




 ダウンロードした gpc-20070904.i386-pc-mingw32.tar.gz を C:\PG\GNUPascal の中で展開します。
 MinGW/msysの tar コマンドを使用します。

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\PG>CD GNUPascal

C:\PG\GNUPascal>C:\GPC\msys\1.0\bin\tar zxvfgpc-20070904.i386-pc-mingw32.tar.gz
mingw/
mingw/bin/
mingw/bin/gpc.exe
mingw/bin/gpc-run
mingw/bin/binobj.exe
mingw/bin/gpidump.exe
  ・
  ・(中略)
  ・
mingw/man/
mingw/man/man1/
mingw/man/man1/binobj.1
mingw/man/man1/gpidump.1
mingw/man/man1/gpc.1
mingw/man/man1/gpc-run.1

C:\PG\GNUPascal>



 展開した「mingw」の中身を MinGW をインストールした「C:\GPC」の中にコピーします(一部上書き)。

C:\PG\GNUPascal>XCOPY /S/Y mingw\. C:\GPC\.
mingw\.\bin\binobj.exe
mingw\.\bin\gpc-run
mingw\.\bin\gpc.exe
mingw\.\bin\gpidump.exe
mingw\.\doc\gpc\AUTHORS
mingw\.\doc\gpc\BUGS
  ・
  ・(中略)
  ・
mingw\.\libexec\gcc\mingw32\3.4.5\collect2.exe
mingw\.\libexec\gcc\mingw32\3.4.5\gpc1.exe
mingw\.\man\man1\binobj.1
mingw\.\man\man1\gpc-run.1
mingw\.\man\man1\gpc.1
mingw\.\man\man1\gpidump.1
348 個のファイルをコピーしました

C:\PG\GNUPascal>



 これで、GNU Pascal の設定は完了です。ダウンロードした gpc-20070904.i386-pc-mingw32.tar.gz は削除してもかまいません。



GNU PascalのPATHの設定


 GNU Pascal の PATH(環境変数)の設定は、システムのプロパティで設定せず、コマンドスクリプトファイルで一時的に設定する方法をとります。
 システムのプロパティで設定すると、Windowsのすべてのアプリが影響を受けるので、できるだけ不必要な設定は避けたいと思います。
 コマンドプロンプトで作業する場合、PATH コマンドで PATH の設定を変更すると、そのコマンドプロンプトにだけ作用し、コマンドプロンプトを終了すると設定変更も無効となります。そのため、必要な PATH コマンドを発行するコマンドスクリプトファイルを作成し、コマンドプロンプトを起動したら作業の前に対象のコマンドスクリプトを実行します。

 以下のコマンドスクリプトをメモ帳(Notepad.exe)やエディタで作成し、C:\CMD ディレクトリに 「gnupas.cmd」というファイルで保存します。

@ECHO OFF
REM
REM GNU Pascal 環境変数設定(MinGW版)。
REM
CALL resetpath.cmd
SET  LANG=ja_JP.SJIS
SET  C_INCLUDE_PATH=
SET  GCC_BASE=
SET  GCC_BASE_MINGW=4.8.1
SET  GCC_BASE_GPC=3.4.5
SET  GPC_EXEC_PREFIX=C:\GPC\libexec\gcc\mingw32;%GCC_BASE_GPC%
SET  LIBRARY_PATH=C:\MinGW32\lib;C:\MinGW32\lib\gcc\mingw32\%GCC_BASE_MINGW%
SET  LIBRARY_PATH=%LIBRARY_PATH%;C:\GPC\lib\gcc\mingw32\%GCC_BASE_GPC%
SET  GPC_UNIT_PATH=C:\GPC\lib\gcc\mingw32\%GCC_BASE_GPC%\units
PATH C:\MinGW32\bin\;C:\MinGW32\msys\1.0\bin;C:\GPC\bin;%PATH%

 ※ resetpath.cmd は「共通設定」ページで作成したコマンドスクリプトファイルです。
 ※ GCC_BASE_MINGW の値は、使用するMinGWのgccのバージョンを指定して下さい。

 作成した gnupas.cmd コマンドスクリプトを実行し、GNU Pascalコンパイラ gpc.exe を実行すると、以下のようにコンパイラのメッセージが表示されます。

C:\PG\GNUPascal>gnupas

C:\PG\GNUPascal>gpc
GNU Pascal version 20070904, based on gcc-3.4.5 (mingw special).
Copyright (C) 1987-2006 Free Software Foundation, Inc.

GNU Pascal is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.

GNU Pascal is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

For more version information on components of the GNU Pascal compiler,
especially useful when reporting bugs, type the command
   `gpc --verbose'.

Most used command line options:
   -c         Compile or assemble the source files, but do not link.
   -o FILE    Place output in file FILE.
   --automake Automatically (re)compile modules/units.
   -v         Be verbose.

The command line options are described in the online documentation.
   `info -f gpc invoking' describes them in detail.

Report bugs to <gpc@gnu.de>.


C:\PG\GNUPascal>



 コマンドプロンプトを起動したら最初に1回 gnupas.cmd を実行してください。以降の説明では gnupas.cmd が実行されていることを前提とします。




ISO Pascal の Hello, world.




 本サイトでは、GNU Pascal を ISO Pascal コンパイラとして使用します。GNU Pascal は、ISO Pascal 以外に拡張された機能も持ちますが、ISO Pascal 以外の拡張機能については触れません。実用的な Pascal については Free Pascal(Lazarus) で取り上げたいと思います。
 ここでは、国際標準規格としてのPascalとして進めます。



ISO 標準 PascalのHollo, world.


 「はじめに」ページで示したPascal版 Hello, world. のメッセージを「世界よ、こんにちは。」に変えてコンパイルしたいと思います。日本語を含んだプログラムソースのコンパイルができるかどうかは結構重要な問題です。
 GNU Pascalでは、文字コードはShift-JIS(コードページ932)を使用してください。日本語Windowsの標準の文字コードはコードページ932です。

 C:\PG\GNUPascal に Hello というサブディレクトリを作成し、その中に以下のプログラムを Hello.p というファイルで保存してください。(プログラム部分のCopy&Pastができます)
 ファイルの拡張子は何でも良いのですが、ISO Pascal は .p とし、Free Pascal は .pp としたいと思います。

 また、基本的には1つのプログラムは1つのサブディレクトリを用意して、その中でコンパイルします。ソースファイルは複数のときもあります。

 ISO Pascalについての説明は別途行いますので、ここではこの通りに実行して、正しくコンパイルできる環境ができたことを確認してください。

{ ISO PascalのHello, world.(日本語版) }

program Hello(Output);
begin
  WriteLn(Output, '世界よ、こんにちは。')
end.


 Hello.p をコンパイルして実行してみましょう。

C:\PG>CD GNUPascal\Hello

C:\PG\GNUPascal\Hello>gpc --standard-pascal -o Hello.exe Hello.p

C:\PG\GNUPascal\Hello>Hello
世界よ、こんにちは。

C:\PG\GNUPascal\Hello>




ISO 拡張 PascalのHollo, world.


 Hello.p はISO 拡張 Pascal でもコンパイルできますが、ISO 拡張 Pascal 特有のモジュールプログラミングの Hello, world. をコンパイルしてみましょう。
 プログラムの内容はモジュールプログラミングに適したものではなく、分割コンパイルのためのサンプルと考えてください。

 C:\PG\GNUPascal に Hello2 というサブディレクトリを作成し、その中に以下のプログラムを Hello2.p というファイルで保存してください。

{=============================================================================}
{= プログラム:Hello2                                                        =}
{=============================================================================}

program Hello2(Output);

{ SayHelloMod から HelloProcs をインポート。ただし SayHelloEng と SayHelloJpn のみ }
import
  HelloProcs only (SayHelloEng, SayHelloJpn);

begin

  SayHelloEng(Output);    { SayHelloMod の SayHelloEng の呼び出し }
  SayHelloJpn(Output);    { SayHelloMod の SayHelloJpn の呼び出し }

end.


 同じ場所に以下のプログラムを SayHelloMod.p というファイルで保存してください。

{=============================================================================}
{= モジュール:SayHelloMod 【インターフェース部】                            =}
{=============================================================================}

module SayHelloMod interface;

export
  HelloProcs = (SayHelloEng, SayHelloGmn, SayHelloJpn);

procedure SayHelloEng(var F : Text);

procedure SayHelloGmn(var F : Text);

procedure SayHelloJpn(var F : Text);

end.

{=============================================================================}
{= モジュール:SeyHelloMod 【実現部】                                        =}
{=============================================================================}

module SayHelloMod implementation;

{ 英語 }
procedure SayHelloEng;
begin
  WriteLn(F, 'Hello, World.');
end;

{ ドイツ語 }
procedure SayHelloGmn;
begin
  WriteLn(F, 'Hallo, Welt.');
end;

{ 日本語 }
procedure SayHelloJpn;
begin
  WriteLn(F, '世界よ、こんにちは。');
end;

end.


 同じ場所に以下のメイクスクリプトを makefile というファイルで保存してください。

#
# Hello2 の メイクファイル
#

MAIN = Hello2
MOD1 = SayHelloMod
INT1 = HelloProcs

# ISO 10206 Extended Pascal
GPCFLAGS = --extended-pascal
# ISO 7185 Pascal 
#GPCFLAGS = --standard-pascal

$(MAIN).exe : $(MAIN).p $(MOD1).o
	gpc $(GPCFLAGS) -o $(MAIN).exe $(MAIN).p

$(MOD1).o : $(MOD1).p
	@rm -f $(MOD1)-all.gpi $(INT1).gpi
	gpc $(GPCFLAGS) -c -o $(MOD1).o $(MOD1).p

clean :
	rm -f $(MAIN).exe $(MOD1).o $(MOD1)-all.gpi $(INT1).gpi



 Hello2 をメイクして実行してみましょう。

C:\PG>CD GNUPascal\Hello2

C:\PG\GNUPascal\Hello2>make
gpc --extended-pascal -c -o SayHelloMod.o SayHelloMod.p
gpc --extended-pascal -o Hello2.exe Hello2.p

C:\PG\GNUPascal\Hello2>Hello2
Hello, World.
世界よ、こんにちは。

C:\PG\GNUPascal\Hello2>



 生成物(実行モジュール、インターフェースファイル、オブジェクトファイル)の削除は、make clean で削除できます。

C:\PG\GNUPascal\Hello2>make clean
rm -f Hello2.exe SayHelloMod.o SayHelloMod-all.gpi HelloProcs.gpi

C:\PG\GNUPascal\Hello2>



 ここまでできれば、GNU Pascalの環境は完了です。
 うまくいかなかった場合は、「共通設定」ページと「MinGWの設定(GNU Pascal用)」と本ページを再度見直してください。