Next: , Previous: Program Sources, Up: A Program


7.1.2 プログラムのリンク

configureで見つからないライブラリに対してリンクする必要がある場 合,そうするためにLDADDを使用することが可能です.この変数は,リ ンクする追加のオブジェクトやライブラリを指定するために使用されます.そ れは,特定のリンカフラグを指定するには不適切で,この目的では AM_LDFLAGSを使用すべきです. 複数のプログラムが一つのディレクトリでビルドされていても,リンク時に同 じ条件を共有しないときもあります.この場合は,グローバルなLDADD に優先させるため,‘prog_LDADD’変数(ここでのprogはプロ グラムの名前で,それは‘_PROGRAMS’変数にあって,通常は小文字で書か れています)を使用することが可能です.この変数が所定のプログラムに対し て存在する場合,そのプログラムはLDADDを使用してリンクされません. 例えば,GNU cpioでは,paxcpio,そしてmtは, libcpio.aライブラリにリンクされます.しかし,rmtは同じディ レクトリでビルドされますが,そのようなリンクは必要ありません.また, mtrmtは特定のアーキテクチャでのみビルドされます.以下 は,cpioのsrc/Makefile.amに似たものです(省略されています).

     bin_PROGRAMS = cpio pax $(MT)
     libexec_PROGRAMS = $(RMT)
     EXTRA_PROGRAMS = mt rmt
     
     LDADD = ../lib/libcpio.a $(INTLLIBS)
     rmt_LDADD =
     
     cpio_SOURCES = ...
     pax_SOURCES = ...
     mt_SOURCES = ...
     rmt_SOURCES = ...

prog_LDADD’でプログラム独自のリンカフラグ(‘-l’, ‘-L’,‘-dlopen’そして‘-dlpreopen’を除く)を渡すことは不 適当です.そのため,この目的に対しては‘prog_LDFLAGS’変数を 使用してください. 実際にはプログラムの一部でない他のターゲットに依存するプログラムを持つ ことが役に立つこともあります.これは‘prog_DEPENDENCIES’変数 を使用することで可能になります.それぞれのプログラムはこの変数の内容に 依存しますが,それ以上の解釈はされません.

prog_DEPENDENCIES’が提供されていない場合,Automakeが考えま す.自動的に割り当てられる値は‘prog_LDADD’の内容で,ほとん どのconfigureの置換式,‘-l’,‘-L’,‘-dlopen’,そして ‘-dlpreopen’オプションは削除されます.残っているconfigureの置換式 は,‘$(LIBOBJS)’と‘$(ALLOCA)’だけです.これらは,生成される ‘prog_DEPENDENCIES’に無効な値を与えないことが知られているの で残されています.