[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.1 コンパイラドライバ ‘gcc’ の制御

コンパイラドライバの制御に関するマクロを以下に示す。

SWITCH_TAKES_ARG (char)

一個のC の式。オプション ‘-char’ が引数を取るかどうかを 指定する。この式の値は、オプションが取る引数の数である。 多くのオプションでは 0 になる。

このマクロは、デフォルトでは、DEFAULT_SWITCH_TAKES_ARG に 定義される。DEFAULT_SWITCH_TAKES_ARG は、 標準のオプションを正しく扱う。 引数を取るオプションを新たに追加しない限り SWITCH_TAKES_ARG を 定義する必要はない。 定義する場合には、まず DEFAULT_SWITCH_TAKES_ARG を呼び出してから、 追加したオプションの検査を行なうようにすること。

WORD_SWITCH_TAKES_ARG (name)

C の式であり、オプション ‘-name’ が引数を取るかどうかを 指定する。この式の値は、オプションが取る引数の数である。 多くのオプションでは 0 になる。複数文字からなるオプション名の場合には、 SWITCH_TAKES_ARG の代わりにこちらを使う。

このマクロは、デフォルトで DEFAULT_WORD_SWITCH_TAKES_ARG に 定義されており、標準のオプションを正しく扱うことができる。 定義し直す場合には、まず DEFAULT_WORD_SWITCH_TAKES_ARG を 呼び出してから、追加したオプションの検査を行うようにする必要がある。

SWITCH_CURTAILS_COMPILATION (char)

一個の C の式であり、‘-char’ というオプションが、 実行形式の生成の前でコンパイルを止めるかどうかを決定する。 この式の値は、ブール型であり、オプションが実行形式の生成を止めるなら ゼロでない値であり、止めないならゼロである。

デフォルトでは、このマクロは DEFAULT_SWITCH_CURTAILS_COMPILATION として定義される。DEFAULT_SWITCH_CURTAILS_COMPILATION は 標準のオプションを正しく取り扱う。 実行形式の生成に影響を与えるオプションを追加するのでない限り、 SWITCH_CURTAILS_COMPILATION を定義する必要はない。 再定義するなら、DEFAULT_SWITCH_CURTAILS_COMPILATION をまず 呼び出して、次に追加したオプションの検査を行うようにする必要がある。

SWITCHES_NEED_SPACES

文字列を値とする C の式であり、リンカに渡すオプションのうち、 オプションとその引数との間に空白を必要とするものを列挙する。

このマクロが定義されない場合、デフォルトは "" になる。

CPP_SPEC

一個の C の文字列定数。 CPP に渡すオプションを GNU CC のドライバプログラムに 知らせる。 これは同時に、ユーザが指定したオプションを GNU CC が CPP に渡すオプションに変換する方法を指定することも出来る。

何もする必要が無いときには、このマクロは定義しないこと。

NO_BUILTIN_SIZE_TYPE

このマクロが定義されていると、プリプロセッサは組み込みマクロ __SIZE_TYPE__ を定義しない。その場合は代わりに、 マクロ __SIZE_TYPE__CPP_SPEC で定義する必要がある。

SIZE_TYPE がプリプロセッサからは参照できないターゲット依存の フラグに依存するなら、このマクロを定義すべきである。 その他の場合は、定義すべきでない。

NO_BUILTIN_PTRDIFF_TYPE

このマクロを定義した場合、プリプロセッサは組み込みマクロ __PTRDIFF_TYPE__ を定義しない。 その場合は代わりに __PTRDIFF_TYPE__ を、CPP_SPEC で 定義する必要がある。

PTRDIFF_TYPE がプリプロセッサからは参照できないターゲット依存の フラグに依存するなら、このマクロを定義すべきである。 その他の場合は、定義すべきでない。

SIGNED_CHAR_SPEC

このマクロは C の文字列定数に定義し、CPP に渡すべきオプションを GNU CC のドライバプログラムに知らせる。 デフォルトでは、cc1charunsigned char と 同じように扱うなら、‘-D__CHAR_UNSIGNED__’ というオプションを 渡すように定義されている。

デフォルトの定義を変える必要がないのであれば、このマクロは定義しないこと。

CC1_SPEC

GNU CC のドライバプログラムが cc1 に渡すオプションを C の文字列定数で定義する。これは同時に、ユーザが指定したオプションを GNU CC が cc1 に渡すオプションに変換する方法を指定することも出来る。

何もする必要が無いときには、このマクロは定義しないこと。

CC1PLUS_SPEC

C の文字列定数であり、GNU CC のドライバプログラムに対し、cc1plus に 渡すべきオプションを知らせる。

何もする必要がなければ、このマクロは定義しないこと。

ASM_SPEC

C の文字列定数であり、GNU CC のドライバプログラムに対し、アセンブラに 渡すべきオプションを知らせる。さらに、GNU CC に与えられた オプションを、GNU CC がアセンブラに渡すべきオプションに変換する方法の 指定も行う。例としては ‘sun3.h’ を参照のこと。

何もする必要がなければ、このマクロは定義しないこと。

ASM_FINAL_SPEC

C の文字列定数であり、GNU CC のドライバプログラムに対し、 通常のアセンブラの後に後処理を行うプログラムを実行する方法を 知らせる。通常は、この後処理は不要である。 この例としては、‘mips.h’ を参照のこと。

何もする必要がなければ、このマクロは定義しないこと。

LINK_SPEC

C の文字列定数であり、GNU CC のドライバプログラムに対し、リンカに 渡すべきオプションを知らせる。さらに、GNU CC に与えられた オプションを、GNU CC がリンカに渡すべきオプションに変換する方法を 指定する。

何もする必要がなければ、このマクロは定義しないこと。

LIB_SPEC

C の文字列定数で、LINK_SPEC に良く似た使われ方をする。 違いは、LIB_SPEC はリンカに指定されたコマンドの最後に 置かれることである。

このマクロが定義されていない場合は、デフォルトは普通置かれている場所から 標準 C ライブラリをロードすることになる。‘gcc.c’ を参照のこと。

LIBGCC_SPEC

C の文字列定数で、GNU CC のドライバプログラムに、いつどのように、 ‘libgcc.a’ への参照をリンカのコマンド行に置くかを指示する。 この定数は、LIB_SPEC の値の前後両方に置かれる。

このマクロが定義されていない場合は、GNU CC のドライバはデフォルトでは、 ‘-shared’ オプションが指定されていない限り、 文字列 ‘-lgcc’ をリンカに渡す。

STARTFILE_SPEC

LINK_SPEC と良く似ている、やはり別の C の文字列定数である。 違いは、STARTFILE_SPEC がリンカに渡されるコマンド行引数の 先頭で使われる点である。

このマクロが定義されていなければ、デフォルトは C の標準的な スタートアップファイルを通常の場所からロードするという定義になる。 ‘gcc.c’ を参照のこと。

ENDFILE_SPEC

LINK_SPEC と良く似ている、もう一つのやはり別の C の文字列定数である。 違いは、ENDFILE_SPEC がリンカに渡されるコマンド行引数の 最後で使われる点である。

何もする必要がなければ、このマクロは定義しないこと。

EXTRA_SPECS

このマクロで、‘specs’ ファイルに追加する指定を定義する。 ここで追加した指定は、CC1_SPEC の様な様々な指定で使用できる。

定義は、構造体の配列の初期化子とすべきである。 この構造体は、指定名を定義する文字列定数と指定そのものを与える 文字列定数を含む。

何もする必要がなければ、このマクロは定義しないこと。

EXTRA_SPECS が役に立つのは、ある一つのアーキテクチャに関連する いくつものターゲットがあるときである。 そのような場合、互いに似通った ..._SPECS がいくつもあり、 保守者はこれらの定義を一箇所で集中管理したいであろう。

例えば、PowerPC の System V.4 のターゲットは、EXTRA_SPECS を 使って、System V の呼びだしシーケンスを使うときは _CALL_SYSV を、 古い AIX ベースの呼びだしシーケンスを使うときは _CALL_AIX を 定義している。

ターゲットファイル ‘config/rs6000/rs6000.h’ では以下のような 定義を行なっている。

 
#define EXTRA_SPECS \
  { "cpp_sysv_default", CPP_SYSV_DEFAULT },

#define CPP_SYS_DEFAULT ""

ターゲットファイル ‘config/rs6000/sysv.h’ では以下のような 定義を行なっている。

 
#undef CPP_SPEC
#define CPP_SPEC \
"%{posix: -D_POSIX_SOURCE } \
%{mcall-sysv: -D_CALL_SYSV } %{mcall-aix: -D_CALL_AIX } \
%{!mcall-sysv: %{!mcall-aix: %(cpp_sysv_default) }} \
%{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"

#undef CPP_SYSV_DEFAULT
#define CPP_SYSV_DEFAULT "-D_CALL_SYSV"

一方、‘config/rs6000/eabiaix.h’ の定義は以下の通りである。

 
#undef CPP_SYSV_DEFAULT
#define CPP_SYSV_DEFAULT "-D_CALL_AIX"
LINK_LIBGCC_SPECIAL

ライブラリ ‘libgcc.a’ はドライバプログラム自身が探すべきであり、 リンカには ‘-L’ オプションを渡すべきでなければ、このマクロを 定義する。 このマクロを定義した場合、ドライバプログラムは、引数 ‘-lgcc’ を リンカに渡して ‘libgcc.a’ の検索を行なわせ、検索を行なうディレクトリ を ‘-L’ オプションでリンカに渡す。

LINK_LIBGCC_SPECIAL_1

ドライバプログラムがライブラリ ‘libgcc.a’ を探すべきであるなら、 このマクロを定義する。 このマクロが定義されていない場合、引数 ‘-lgcc’ を リンカに渡して ‘libgcc.a’ の検索を行なわせる。 このマクロは LINK_LIBGCC_SPECIAL とほぼ同じだが、 ‘-L’ オプションを渡さない点が異なる。

LINK_COMMAND_SPEC

C の文字列定数。リンカを実行するの必要な完全なコマンド行を指定する。 これを定義するときは、‘gcc.c’ にあるリンクのためのコマンド行に 変更が加わる度に読者の移植部分を更新する必要がある。このため、 リンカを起動するコマンド行を完全に再定義する必要があり、かつ、 読者が必要な効果を得るための方法が他にない場合だけ、このマクロを 定義すること。

MULTILIB_DEFAULTS

このマクロは、C の文字列の配列の初期化式として定義して、 ドライバプログラムに対し、どのオプションがこのターゲットのデフォルト なのか、そして、どれが MULTILIB_OPTIONSを使った場合に 特別に扱う必要がないオプションかを知らせる。

MULTILIB_OPTIONS がターゲットの makefile 断片で定義されて いない場合や、 MULTILIB_OPTIONS に列挙されているオプションの中に デフォルトで指定されるものが無い場合は、このマクロは定義しないこと。

RELATIVE_PREFIX_NOT_LINKDIR

このマクロを定義すると、gcc は、プレフィックスが絶対パスの 場合は、‘-B’ で指定されたプレフィックスをリンカの ‘-L’ オプション についてだけ変換する。

STANDARD_EXEC_PREFIX

コンパイラの実行形式ファイル群を検索する時のデフォルトの接頭辞である、 ‘/usr/local/lib/gcc-lib/’ を別のものに置き換えたい場合は、 このマクロを、それを表す C の文字列定数として定義する。

MD_EXEC_PREFIX

このマクロが定義されていれば、STANDARD_EXEC_PREFIX の 後で、これを接頭辞として追加で検索が行なわれる。 ‘-b’ オプションが指定されたり、クロスコンパイラとして 構築された場合は、MD_EXEC_PREFIX の検索は行なわれない。 MD_EXEC_PREFIX を定義する場合は、それを ‘configure.in’ 中の、 アセンブラを検索するのに使われるディレクトリのリストに追加するのを 忘れないこと。

STANDARD_STARTFILE_PREFIX

crt0.o’ のようなスタートアップファイルを 検索する時のデフォルトの接頭辞である、 ‘/usr/local/lib/’ を別のものに置き換えたい場合は、 このマクロを、それを表す C の文字列定数として定義する。

MD_STARTFILE_PREFIX

このマクロが定義されていれば、標準の接頭辞でスタートアップファイル検索が 行なわれた後で、このマクロを接頭辞として追加で検索が行なわれる。 ‘-b’ オプションが指定されたり、クロスコンパイラとして 構築された場合は、MD_STARTFILE_PREFIX の検索は行なわれない。

MD_STARTFILE_PREFIX_1

このマクロが定義されていれば、標準の接頭辞でスタートアップファイル検索が 行なわれた後で、このマクロを接頭辞としてさらにもう一度追加で検索が行なわれる。 ‘-b’ オプションが指定されたり、クロスコンパイラとして 構築された場合は、この接頭辞での検索は行なわれない。

INIT_ENVIRONMENT

ドライバから呼び出されるプログラム、例えばアセンブラやローダに 対して環境変数を指定したければ、このマクロを C の文字列定数として 定義する。ドライバは、このマクロの値を putenv に渡して、 必要な環境変数の初期化を行なう。

LOCAL_INCLUDE_DIR

ローカルのヘッダファイルを検索するときのデフォルトの接頭辞である、 ‘/usr/local/include’ の代わりのものを使いたいときは、 それを C の文字列定数としてこのマクロに定義する。 LOCAL_INCLUDE_DIR は、SYSTEM_INCLUDE_DIR の前に 検索される。

クロスコンパイラの場合はこのマクロは使わないし、 ‘/usr/local/include’ やその代わりの場所は 検索しない。

SYSTEM_INCLUDE_DIR

標準のディレクトリの前にヘッダファイルを検索したい、システム固有の ディレクトリがあれば、このマクロで C の文字列定数として定義する。 SYSTEM_INCLUDE_DIR は、 STANDARD_INCLUDE_DIR の前に 検索される。

クロスコンパイラの場合はこのマクロは使わないし、 これで指定されたディレクトリを検索しない。

STANDARD_INCLUDE_DIR

ヘッダファイルを検索するときのデフォルトの接頭辞である、 ‘/usr/include’ を別のものに置き換えたいときは、このマクロで C の文字列として定義する。

クロスコンパイラの場合はこのマクロは使わないし、 ‘/usr/include’ やその代わりのディレクトリを検索しない。

STANDARD_INCLUDE_COMPONENT

STANDARD_INCLUDE_DIR に対応する「成分」である。 成分の説明については以下の INCLUDE_DEFAUTLS を参照のこと。 このマクロを定義しない場合は、成分は一つも使われない。

INCLUDE_DEFAULTS

インクルードファイルのデフォルトの検索パス全体を上書きしたい場合は、 このマクロを定義する。ネイティブコンパイラの場合は、 デフォルトの検索パスは通常は、GCC_INCLUDE_DIRLOCAL_INCLUDE_DIRSYSTEM_INCLUDE_DIRGPLUSPLUS_INCLUDE_DIRSTANDARD_INCLUDE_DIR から成る。 さらに、GPLUSPLUS_INCLUDE_DIRGCC_INCLUDE_DIR は ‘Makefile’ で自動的に定義され、GCC に固有の検索パスを指定する。 ディレクトリ GPLUSPLUS_INCLUDE_DIR は、C++ プログラムについて だけ使われる。

このマクロは、構造体の配列の初期化子として定義しなければならない。 配列の各要素は、それぞれ四つの要素を持つ。 ディレクトリ名(文字列定数)、成分名、C++ 向けディレクトリ用フラグ、 C++ プログラムをコンパイルするときには、そのディレクトリのインクルード行を extern "C" で囲む必要がないかどうかを示すフラグ、である。 配列の終りはヌルの要素で示す。

成分名は、インクルードファイルがどの GNU パッケージのものかを示す。 これは全て大文字で記す。例えば、‘GCC’ や ‘BINUTILS’ とする。 インクルードファイルの入っているパッケージが、ベンダ提供の オペレーティングシステムの一部である場合は、成分名は ‘0’ と書く ようにする。

例えば、VAX/VMS 向けの定義は以下のようになる。

 
#define INCLUDE_DEFAULTS \
{                                       \
  { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
  { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
  { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
  { ".", 0, 0, 0},                      \
  { 0, 0, 0, 0}                         \
}

実行形式ファイルのプレフィックスを試す順序を以下に示す。

  1. ユーザにより ‘-B’ で指定されたプレフィックス。
  2. もし指定されていれば、環境変数 GCC_EXEC_PREFIX
  3. 環境変数 COMPILER_PATH で指定されたディレクトリ。
  4. マクロ STANDARD_EXEC_PREFIX
  5. /usr/lib/gcc/’。
  6. 指定されていれば、マクロ MD_EXEC_PREFIX

開始ファイルは、以下のプレフィックスを順番に探す。

  1. ユーザが ‘-B’ で指定したプレフィックス。
  2. 定義されていれば、環境変数 GCC_EXEC_PREFIX
  3. 環境変数 LIBRARY_PATH で指定されたディレクトリ群 (ネイティブの場合のみ。クロスコンパイラでは使われない。)
  4. マクロ STANDARD_EXEC_PREFIX
  5. /usr/lib/gcc/’.
  6. 定義されていれば、マクロ MD_EXEC_PREFIX
  7. 定義されていれば、マクロ MD_STARTFILE_PREFIX
  8. マクロ STANDARD_STARTFILE_PREFIX
  9. /lib/’.
  10. /usr/lib/’.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated using texi2html 1.78.