Automake-ソースツリーをきれいに保つ方法は?


10

自分でビルドするためにGNU autotoolsを使用するプロジェクトがあります。autotoolsがバージョン管理されていないすべての制御ファイルを別のディレクトリに生成するように変更しようとしています。そうすることで、ソースツリーに一時ファイルをきれいに保つことができます。誰でもこれを行う方法について何かアイデアがありますか?


6
ツリー外ビルドを実行するだけです:stackoverflow.com/questions/1311231/…残念ながら、まだいくつかの残留物が残っています。いつかCMakeを試してみてください。
Vitor Py

3
その日が来て、醜いautconfからcmakeに切り替えるのに1時間もかかりませんでした。
vorad

1
CMakeはautoconfよりもずっとクリーンです。実際、ツリー外ビルドは、CMakeビルドを行う最も一般的な方法です。良い選択:)
Vitor Py

cmakeを使用してビルドプロセスを制御するMakefileをソースツリーの最上部に配置するのはどのくらいの頻度ですか?セイのmakeが実行されます。mkdir -pビルド&& CD構築cmakeの&& ... &&メイク(多分のような異なるターゲット上ので、メイクテストなど)。
11

珍しい。CMakeはメイクファイルを生成する必要がありますが、その逆ではありません!Mastering CMakeと呼ばれる本を探すか、実際の単語の例については、VTKまたはKDEのビルドプロセスを参照してください。CMakeの大きな利点はmakeの上にあります:Visual Studio vcproj、nmake Makefiles、XCodeなどを使用してソフトウェアをビルドすることもできます。KDEはシェルスクリプト( 'kdebuild')を使用してビルドプロセスを開始します。それを見てください。
Vitor Py

回答:


2

autotoolsパッケージには、正当な理由により、多くのハードコーディングされた相対パスと名前が含まれています。あなたの最良のオプションは、出力を合計し、リビジョン管理で無視されるようにタグ付けすることです。たとえば.cvsignore.hgignoreまたはsvn:ignore属性として。一部のRCSでは、ワイルドカードを再帰的に指定することもできます。


4
このハードコーディングされた相対パスを使用する理由は、1970年のUNIXプログラミングスタイル以外にありません。
Lothar 2017

2

解決策:ソース外のビルドを作成する

  • コメントで提案されているように、ソース外のビルドを行うことができます。
  • 原則は次のとおりです。「ビルドツリー」という別のディレクトリを作成し、そのディレクトリから(相対パスまたは絶対パスで)configureスクリプトを実行します。

自動チェックの例

たとえば、これはGNU helloをフェッチしてビルドし、ソースツリーが少し変更されていないことを確認します。

ソースツリーの準備

この部分は、ディレクトリをフェッチして準備します。

{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}

一般的な部分:プロジェクトで再利用します

この部分は、他のautoconfベースのプロジェクトで使用できます。実行する前にプロジェクトにcdしてください。注意:これは実行さrmれます。バリアントでのプレイに注意する場合は、いずれにしても責任があります。

export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)

パーツをチェック

これは、ビルドが完全にソース外であるかどうかをチェックします。

{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}

ここではこれを出力します:

/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.

ボーナス:非ルートインストール

上記の--prefix="${MYPREFIX?}"部分はオプションです。それはあなたのアカウントにローカルな「make install」をすることを可能にします。従来の「sudo make install」をシステム全体の場所にしたい場合は、を削除できます--prefix="${MYPREFIX?}"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.