4

Gnu Autotools(つまり、automake、autoconf、libtool)を使用してサブフォルダー(「サブパッケージ」と呼ばれる)内のソースコードを管理するSubversionプロジェクトがあります。サブパッケージは、サブパッケージのルートソースディレクトリの上にあり、他のサブパッケージに共通のソースファイルを参照します。残念ながら、「make dist」を実行してディストリビューションtarballを作成すると、共通のソースファイルがディストリビューションに含まれなくなります。

autoconf / automakeを使用して、ソースを配布する前にこれらの共通ソースファイルをサブパッケージのサブディレクトリに移動し、再配置されたソースファイルを正しく指すようにmakefileを調整する方法はありますか?明らかに、コンパイル前にmakefileにこれらのソースファイルを移動させることは可能ですが、Subversionリポジトリ内で作業する場合、これらの移動されたファイルはリビジョン制御されており、元のファイルの代わりに移動されたファイルを誤って編集する可能性があるため、問題が発生します。

4

2 に答える 2

3

外部ファイルをコピーするメイクファイルを含む、たとえば「common」と呼ばれるサブパッケージに空のディレクトリを作成できます。次に、dist-hook ターゲットを使用して、ファイルを「common」ディレクトリのバージョンに直接移動できます。これは tarball に圧縮されます。そうすれば、それらが転がって編集されることを心配する必要はありません。また、コピーした Makefile.am、Makefile.in、および Makefile を「共通」に上書きします。

subpackage/common/Makefile.am の例 (未テスト):

dist-hook:
    cp -p $(top_srcdir)/../common/Makefile* $(top_srcdir)/../common/*.[ch] $(distdir)

ただし、これが機能するかどうかは 100% 確信が持てません。他のすべてがそれらのソースファイルを見つけると予想する場所によっては、パッケージの残りの部分が壊れる可能性があります。tarball を展開してそこから dist を作成しようとすると、おそらく dist の作成が中断されます。この種のトリックは嫌われていることを知っておく必要があります。しかし、私はあなたが遊ぶのに十分なアイデアを与えたことを願っています.

于 2009-12-03T18:09:41.410 に答える
2

ファイルを移動する代わりに (私にはいつも怪しげに聞こえます)、シンボリック リンクを使用してみませんか? サブパッケージでローカル ファイルのみを参照し、Makefile「ローカル ファイルがここにない場合は、親のファイルへのシンボリック リンクを作成する」というルールを設定できます。の実行中make distに、シンボリック リンクがプレーン ファイルに自動的に変換されます。

于 2009-12-09T07:16:27.323 に答える