2010-11-30 17 views
2

AutotoolsプロジェクトにヘッダーのみのC++ライブラリを統合したいと思います。ライブラリはAutoconfとAutomakeを使用しているので、私はAC_CONFIG_SUBDIRSconfigure.acで使用し、SUBDIRS =の行にMakefile.amというライブラリdirを追加しました。autotoolsプロジェクトに(ヘッダーのみの)ライブラリを含める

私の質問は、ヘッダーライブラリがmake installによってインストールされないようにするにはどうすればいいですか?私は1つのバイナリを構築しているので、ユーザはこれらのヘッダを必要としません。

私はライブラリを改ざんしたくないので、新しいバージョンを解凍するだけでアップグレードを取得できます。

答えて

0

SUBDIRSを使用しないでください。以下のハックが動作可能性があります。もちろん

 
all-local: 
     ${MAKE} -C thatlib all 

をライブラリプロジェクトの外で独自のディレクトリに残って、あなただけのCFLAGS/LIBSフラグを経由して、それを指している場合、それが最善だろう。

+1

私はそれを私のツリーの外に保つのが大好きですが、私は外部の依存関係を減らそうとしています。ありがとう、これを試してみましょう。 –

+0

動作しません。私のプログラムの後にライブラリが構築されますが、明らかに動作しません。 –

2

ここにアイデアがあります。

インストールしたくないサードパーティライブラリを、noinst/というサブディレクトリに移動します。例えばBoostのようなものでプロジェクトを出荷したいのであれば、それをディレクトリnoinst/boost/に解凍してください。 AC_CONFIG_SUBDIRS([noinst/boost])を使用してください。 noinst/Makefile.am内では、このような何かを:

SUBDIRS = boost 
# Override Automake's installation targets with the command ":" that does nothing. 
install:; @: 
install-exec:; @: 
install-data:; @: 
uninstall:; @: 

効果が再帰のいくつかは、コマンドトップレベルディレクトリから実行されている「アンインストールが作る」または「*をmake install」をいつでも、再帰はnoinst/に停止することですそのサブディレクトリにはアクセスしません。他の再帰的なコマンド( "make"、 "make clean"、 "make dist"など)は、引き続きサブディレクトリに再帰します。

もちろん、install:と友だちを直接サードパーティのパッケージに上書きし、余分なnoinst/ディレクトリを避けることができます。しかし、あなたが私のような人なら、アップデートを簡単にするために、サードパーティのパッケージを改ざんしたくはありません。 また、上記のセットアップの素晴らしい特性は、誰かがnoinst/boost/に入り、make installを実行すると、それが動作するということです。パッケージをインストールするときにデフォルトでは発生しません。

1

はちょうど同じような問題に出くわしたとautomake manualで解決策を見つけた:

noinst_HEADERSは、ヘッダのみを含むディレクトリに使用する権利変数と無関連するライブラリやプログラム

だろうAndreas

関連する問題