2011-01-21 12 views
1

私は自分のアプリケーション開発に使用するライブラリのセットを持っています。アプリケーションをビルドするたびに、すべてのライブラリが再構築されます。私と私のチームチームは、何度も何度もライブラリを構築することが本当に不必要であると感じています。ライブラリのみをビルドするmakefileを書く方法は?

すべてのライブラリとアプリケーションを個別にビルドするメイクファイルはどうすればよいですか? 私が言っていることは、私が自分のアプリケーションをビルドするとき、私はすでに構築されているすべてのライブラリを構築したくないということです。

いくつかの意見を提案してください。

編集: 説明: 私のアプリはxyzと呼ばれ、すべてのソースファイルは./src/xyzディレクトリにあります。 これはsshやnet-snmpのようなライブラリに依存します。また、net-snmpとsshは./libディレクトリに置かれます。

今すぐアプリケーションがビルドされると、すべてのライブラリが再構築されます。ここでは、私のアプリケーションに必要なライブラリパッケージは変更しません。

ビルドにはほぼ時間がかかります。各ビルドライブラリで再構築され、これは必須ではありません。

今、私の質問ですか? ライブラリとアプリを別々にビルドするmakefileを作成するにはどうすればいいですか?

+4

あなたの依存関係を定義した方法は?ライブラリは、ソースが変更された場合にのみ再構築する必要があります。 – chrisaycock

+5

解決策は、実行可能ファイルをソースコードではなくビルドライブラリに依存させることです。あなたが今やっていることを知るためにmakefileの一部を投稿してください。 – Apalala

+0

@:私の質問を編集し、シナリオを説明しました。 –

答えて

0

あなたは私たちに詳細な答えを与えるためにほぼ十分な情報を与えられていませんが、ここでは概要です:

LIBRARIES = ./lib/ssh ./lib/net-snmp 

SOURCES = foo bar baz 

xyz: $(LIBRARIES) $(SOURCES) 
    command-that-rebuilds-app-from-sources-and-libraries 

./lib/ssh: things-that-ssh-needs 
    command-that-rebuilds-ssh 

./lib/net-snmp: things-that-net-snmp-needs 
    command-that-rebuilds-net-snmp 

XPATH: ./src 
+0

さて、私はほとんど考えていない。しかし、すでにライブラリが構築されているかどうかを知る方法はありますか?毎回ライブラリをビルドする必要はなく、私はいくつかのステップをスキップできます。 –

+2

はあなたのためにそれを世話します。 'things-that-ssh-needs'のどれも変更されていない場合、' lib/ssh'は再構築されません。あなたは常に 'make xyz'を実行します。 –