問題タブ [autotools]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sed - Makefile.amのソースに対してSEDを呼び出す
コンパイル前にsedを実行する必要があるC++コードがあります。これをどのように配置しMakefile.am
ますか?
典型的なmakefileセットアップを試しましたが、ターゲットが存在しないようです。
gentest.cc:
$(SED) -i "s|FIND|REPLACE|" gentest.cc
なぜ私がこれをやりたいのか興味があるのなら、それは私が私のプログラム(slider3.py
)をPythonで書き、私のパートナーが彼をc ++(gentest.cc
)で書いたので、彼は私のものを呼び出す必要があるからです。これは、を編集してargv
から使用することで実現していexecv()
ます。
... {
char **argv2 = new char*[argc];
memset(argv2,0,sizeof(argv2));
argv2[0] = "__PREFIX__/bin/slider3.py";
memcpy(argv2 + 1, argv + 2, sizeof(char *) * (argc - 2));
int oranges = execv(argv2[0], argv2);
printf("%s\n", strerror(oranges));
return oranges;
} ...
で機能していなかったメソッドを使用して、#!
追加を取得することはすでに処理しました。インストールされるファイルのリストへの追加も処理しました。slider3.py
chmod +x
gentest.cc
slider3.py
EXTRA_DIST=testite.sh slider3_base.py
bin_SCRIPTS = slider3.py
CLEANFILES = $(bin_SCRIPTS)
slider3.py: slider3_base.py
rm -f slider3.py
echo "#! " $(PYTHON) > slider3.py
cat slider3_base.py >> slider3.py
chmod +x slider3.py
gentest
このように定義されていますMakefile.am
:
bin_PROGRAMS = gentest
gentest_SOURCES = gentest.cc
gentest_LDADD = libgen.a #../libsbsat.la $(LIBM)
@
そして、これはmake中に実行できません(パターンがで正常に展開されることに注意してくださいMakefile
):
gentest.cc:
$(SED) -i "s|__PREFIX__|@prefix@|" gentest.cc
sed
コンパイルする前に実行する方法について何かアイデアはありますgentest.cc
か?
autotools - Autotools を使用したプリコンパイル済みヘッダー
automake / libtool を使用するプロジェクトで gcc プリコンパイル済みヘッダーを使用することは可能ですか?
新しい make ルールを追加してプリコンパイル済みヘッダーを作成することは難しくありません。問題は、libtool によって導入されたコンパイル フラグも追加する必要があり、AFAIK ではヘッダー入力ファイルを処理できないことです。
どうやってそれができる?
autotools - libtool は「make distclean」によって削除されました
libtool をプログラムのソース ツリーにコピーして、プログラムと共に配布しました。しかし、「make distclean」を実行すると、libtool は生成された残りのファイルとともに削除されます。どうすればそれが起こらないようにできますか?
Makefile.amを入れてみEXTRA_DIST = libtool
ましたが、うまくいきません。
基本的に、configure.ac は次のようになります。
c - Autoconfの問題:「エラー:Cコンパイラは実行可能ファイルを作成できません」
GNU autotoolsを使用してCで作成したプログラムを作成しようとしていますが、configure
実行すると吐き出されるため、設定が間違っているようです。
調べてみるとconfig.log
、次のようになります。
何らかの理由で、autoconfは無効なテストファイルを生成しています:セミコロンとして表示されるその行には何が必要ですか?ビルドはUbuntu9.04とMacOSX 10.6でも同じように失敗するので、これは間違いなく私のせいであり、環境のせいではありません。
automated-tests - autotoolsプロジェクトに追加のmake/testターゲットを追加する
ユニットテストと統合テストが混在するautotoolsプロジェクトがあり、それらはすべて「makecheck」を介して実行されます。一部の統合テストには時間がかかり、あらゆる種類の依存関係(データベースなど)があるため、これは理想的ではありません。
統合テストを分離して、独自のmakeターゲットを割り当てたいと思います。そうすれば、単体テストを(make checkを介して)頻繁に実行でき、統合テストも同様の方法で必要に応じて実行できます。
追加のmakeターゲットを追加する簡単な(またはその他の)方法はありますか?
注:これは大規模なプロジェクトであるため、すべてのmakefileを手動で編集/保守することは望ましくありません。可能であれば「autotoolsの方法」でやりたいと思います。
-更新1--
私はジョンの解決策を試みました、そしてそれは一歩近づいていますが、完全にはそこにありません。私はまだいくつかの問題を抱えています:
1)再帰-ビルドツリーのルートにあるmakefile.amと、テストを含むディレクトリを変更しても問題ありませんが、これを行う方法があるはずです。階層内のすべてのMakefile.amを変更します。(結局のところ、チェックターゲットはこのように機能します)
2).PHONY-.PHONYが再定義されているというメッセージが表示され続けます。別のパッケージ(具体的にはdoxygen)によって設定されているため、これは理解できます。2つを一緒にうまくプレイするにはどうすればよいですか?
autotools - Makefile.am からビルド済みの Makefile を実行するにはどうすればよいですか?
Makefile.am からビルド済みの Makefile を実行するにはどうすればよいですか?
automake/autoconf ビルド システムは初めてです。私が autotools を実装しているパッケージには、それぞれにいくつかのライブラリとテスト実行可能ファイルがあります。一部のライブラリは自動生成された ASN1C コードで、ビルド済みの makefile が付属しています。Makefile.am 内で「ビルド済みの makefile を使用して ASN1C ライブラリをビルドする」と言う最善の方法がわかりません。
このようなものでグーグルを検索しようとするのは、メイクファイルのドキュメントが豊富にあるため、少し難しいです.
ありがとう、チェンツ
build - 脳死のためのオープンソースのビルドシステムを誰も作成しなかったのはなぜですか?
共有ライブラリを構築したい。GNU/Linux は、開発およびターゲット プラットフォームです。C は実装言語です。
ビルド システムをどのようにセットアップするかを決めることができず、それぞれが嫌いな理由がたくさんある次の 3 つのオプションを検討し続けます。
- 手作りの Makefile - 私は過去にほとんどこの方法で作業してきました
- GNU Autotools - 今年の初めに autotools を使用して共有 C ライブラリを構築しましたが、その方法と何百ものチュートリアルをどこで選択したかを忘れてしまいました。
- waf - おそらく単純ですが、それほど簡単ではありません。今日の午後に動作しました。
どちらに行くか決められません。1 つに落ち着いて作業を開始し、問題に遭遇して、もう 1 つのシステムが優れていると判断します。私は立ち往生しています。問題を解決するのに役立つかもしれない誰かがこれに光を当てることができますか?
autotools - C/C++ プロジェクトでライブラリの依存関係を自動検出する最良の方法は何ですか?
C/C++ プロジェクトでライブラリの依存関係を自動検出する最良の方法は何ですか?
マシンにすべての依存関係があるプロジェクトがあります。ビルドして実行します。今、私は autotools ビルドシステムをまとめたいと思っています。使用されるヘッダー ファイルやリンクに必要なライブラリなど、必要なすべての依存関係を自動検出する良い方法を探しています。
ライブラリビットは、私が理解するのが最も難しいようです。リストなどのすべての関数に対して AC_CHECK_LIB コマンドを生成できるようにしたいと思います。おそらく Perl でこれを行うことができますが、既に他の場所に存在することを想像する必要があります。
私が知っているのは、objdump と nm でシンボルを表示できること、関数が属するライブラリをこれらのユーティリティで見つけることができること、そして configure.ac に手動で AC_CHECK_LIB コマンドを入力してチェックできることです。この時点で、自動化は素晴らしいものになるでしょう。
ありがとう、チェンツ
iphone - 公式iPhoneSDK用のAutotoolsベースのライブラリをクロスコンパイルする
バックグラウンド
私はiPhoneを含むいくつかの異なる電話を対象としたプログラムを書いています。プログラムは、いくつかのサードパーティライブラリに依存しています。iPhoneとiPhoneシミュレーター用にこれらのサードパーティライブラリをクロスコンパイルするのに問題があります。ライブラリには、Apache Portable RuntimeとGNUTLS、およびそれらの依存関係が含まれています。ビルドされたライブラリのプレフィックスを「/opt/iphone-3.1」、「/ opt / iphone-3.0」、「/ opt / iphone-2.2.1」、「/ opt/iphone-simulator-3.1」にします。 「」、「/ opt/iphone-simulator-3.0」。
クロスコンパイルプロセスを簡単に再現できるようにするために、ターゲットプラットフォームごとに「configure」スクリプトを呼び出すスクリプトを作成しています(「iphone3.1-configure」、「iphone3.0-configure」、「iphone2.2.1」)。 -configure "、" iphonesim3.1-configure "、および" iphonesim3.0-configure ")。これは私が問題を抱えているところです。
公式のXcode3.2+ iPhoneSDK3.1を搭載したMacOSX 10.6SnowLeopardコンピューターを使用しています。
状態
私は現在、次の「iphone3.1-configure」スクリプトを持っています。
「apr-1.3.8」フォルダで「iphone3.1-configure--disable-dso」を実行していて、次のようになっています。
「config.log」の関連部分は次のとおりです。
質問
「iphone3.1-configure」スクリプトを修正するにはどうすればよいですか?ありがとう。