29

私はこの質問に対する答えを探しましたが、良いものは見つかりませんでした。たぶん古くて何かが変わったので、もう一度お願いします。

私は次のようなディレクトリ構造を持っています:

私のプロジェクト

  • src

  • 置き場

ルートディレクトリで作成する場合、バイナリは./srcを乱雑にするのではなく、./binに配置する必要があります。しかし、どのように?

編集:私はC++を使用しています。私のMakefile.amには特別なことは何もありません。bin_PROGRAM変数と_SOURCES変数だけです。

makeを実行すると、生成されたバイナリが./srcに配置されます。./binに入れたいだけです。

4

3 に答える 3

37

あなたはここで間違った考えを持っています。

ビルド ツリーは、どこで実行しても同じですconfigure。これが、 autoconf が機能するように設計されている方法です。パッケージのユーザー (ソース ツリーを散らかしたくない) は、パッケージがこのように動作することを期待します。

このアプローチは、想像している組織よりもはるかに柔軟な、より一般的なソリューションです。たとえば、ソースを維持し、別のファイルシステムでファイルをビルドしたいということは、それほど珍しいことではありません。

于 2010-02-14T07:06:16.467 に答える
28

Automake は、予想とは異なる方法でディレクトリを設定しようとすると、うまく対処できません。必要なのは、コンパイル後にバイナリを移動するための追加のルールを../bin作成することであり、これは不必要に複雑です。

ソース ディレクトリを乱雑にしたくない場合は、次の方法を試してください。

cd my_project
mkdir build
cd build
../configure
make

これにより、生成されたすべてのファイル (メイクファイル、バイナリ、オブジェクト ファイルなど) が のサブディレクトリに配置されmy_project/buildます。

于 2010-01-27T09:33:44.813 に答える
17

Automakeに特定のディレクトリにバイナリを作成するように指示する1つの方法は、このディレクトリを「bin_PROGRAMS」変数の名前に直接追加することです。

次のsrc/Makefile.amを検討してください。

bin_PROGRAMS = foo
foo_SOURCES = ...
foo_CPPFLAGS = ...
foo_LDFLAGS = ...

バイナリ「src/foo」を作成しますが、Automakeにsrcのソースを使用してバイナリ「bin/foo」を作成するように指示できます。

bin_PROGRAMS = $(top_builddir)/bin/foo
__top_builddir__bin_foo_SOURCES = ...
__top_builddir__bin_foo_CPPFLAGS = ...
__top_builddir__bin_foo_LDFLAGS = ...

私はいくつかのパッケージでそれを試しました、そして「makedistcheck」さえそれを飲み込みます。しかし、それほどハックすることはできません...

于 2010-02-05T08:36:34.587 に答える