問題タブ [automake]
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.
dependencies - automake のヘッダー依存関係
Makefile.am
ファイルに記載されている 1 つのヘッダー ファイルを生成するファイルを作成したいと思いxxx.c
ます。
含まれているとしましょうxxx.c
:
の最後にそれを作成するルールがあることMakefile.am
:
xxx.c
コンパイルを依存させるには何を変更する必要がありversion.h
ますか? してみnodist_progname_SOURCES=version.h
ましたが、うまくいかないようです。
filenames - Automakeパターン展開
Makefile.am
パーツ内の1つのファイルに多くのファイルを含めたいですxxx_SOURCES = ...
。そこで典型的なシェル拡張を使用する方法はありますか? 私が探しているのは、次のものと同等の機能です。
autotools - Autoconf-config.hはどこに行きますか?
私は自分のニーズに合うように(autoconf、automake、libtoolを使用して)独自の単体テストライブラリを作成しています(非常に大量の機能は必要ありません。テストランナーとアサーションだけが必要です)。使えるようになりました。
もちろん、config.hを使用して、どのヘッダーを含めるかを判断します。問題は、config.hが他のプロジェクトのconfig.hと簡単に衝突する傾向があるため、どこに行くべきかわからないことと、アーキテクチャに依存していることです。
このヘッダーをインストールするための私の方法は何ですか?(他のすべてのヘッダーで必要です)
gnu - GNU Autotools:ルートソースディレクトリの上にある「makedist」tarballにソースファイルをどのように含めますか?
Gnu Autotools(つまり、automake、autoconf、libtool)を使用してサブフォルダー(「サブパッケージ」と呼ばれる)内のソースコードを管理するSubversionプロジェクトがあります。サブパッケージは、サブパッケージのルートソースディレクトリの上にあり、他のサブパッケージに共通のソースファイルを参照します。残念ながら、「make dist」を実行してディストリビューションtarballを作成すると、共通のソースファイルがディストリビューションに含まれなくなります。
autoconf / automakeを使用して、ソースを配布する前にこれらの共通ソースファイルをサブパッケージのサブディレクトリに移動し、再配置されたソースファイルを正しく指すようにmakefileを調整する方法はありますか?明らかに、コンパイル前にmakefileにこれらのソースファイルを移動させることは可能ですが、Subversionリポジトリ内で作業する場合、これらの移動されたファイルはリビジョン制御されており、元のファイルの代わりに移動されたファイルを誤って編集する可能性があるため、問題が発生します。
configuration - autoconf/automake の外部ライブラリ設定マクロ
次のことができる汎用ライブラリを構成する autoconf マクロはありますか?
- --configure オプションを使用して生成
- セットアップ ライブラリとインクルード パス
- コンパイラ/プリプロセッサおよびリンカー フラグを設定する
- ライブラリとインクルード ファイルの存在を確認する
- セットアップ構成マクロ
現在、ARG_WITH、CHECK_LIB などを使用してすべてを行っています。手順は一般的なもので、小さな変更を加えたコピー/貼り付けになります。マクロアーカイブを検索しましたが、一般的な解決策が見つかりませんでした。
ありがとう
c++ - DLL/SO ビルド用に特定のフラグを指定/定義することは可能ですか?
DLL のみのビルドに固有のフラグを指定するにはどうすればよいですか。デフォルトでは libtool が追加されます-DDLL_EXPORT
が、これは GNU 規則に従うほとんどのプロジェクトでは問題ありませんが、たとえば Boost を使用する場合は、ライブラリ フラグを指定する必要がある場合があります-DDLL_EXPORT -DBOOST_ALL_DYN_LINK
。 DLL/SO ビルドの特定の定義。
残念ながら、libtool でこれを行う方法が見つかりません。どのフラグを使用すればよいですか?
PS: CMake への移行を提案しようとさえしないでください。
例:
バーにリンクするライブラリ foo を使用し、動的ライブラリのみのシンボルを取得するには -DBAR_EXPORTS が必要です。
のようなものはありますか
誰か?
代替ソリューション: (かなり醜い)
ファイル `defines.h を作成します。
その後:
醜いが動作するはずです。
c++ - Automake によって生成されたライブラリに対してコンパイルするときの未定義の参照
automake を使用するプロジェクトで、奇妙なリンク エラーが発生します。私がやっていることはマニュアルから見るとかなり単純に思えるので、何が間違っているのだろうか...
私のプロジェクトには 3 つのフォルダーがあります。
- src/common では、いくつかの C++ ファイルを libube-common.a 静的ライブラリにコンパイルします。
- src/engine で、いくつかのファイルを libube-engine.a 静的ライブラリにコンパイルします。
- src/client には ... ご想像のとおり、 libue-client.a と、私のメインである ube.cpp という 1 つのファイルがあります。
各ライブラリは、次のような Makefile.am でコンパイルされます。
これにより、さまざまなオブジェクトが次のような行で構築されます。
そして、それらはすべてライブラリに入れられます:
これはすべてうまくいっているように思えます。ライブラリに対していくつかの小さなテスト プログラムをリンクすることもできます (同じメイクファイル内)。
次に、メイン プログラムの Makefile.am で、ローカル ライブラリへのリンクを要求しました。
そして、それが私がこのようなエラーを得る場所です:
最初は、いくつかの静的シンボルが原因だと思っていましたが、非静的シンボルでも問題が発生します。
生成されたライブラリを確認したところ、シンボルが適切に含まれているようです:
唯一の修正は、.o ファイルに対して明示的にリンクすることです (それらを ube_LDADD 行に追加することによって...しかし、それはライブラリを使用するという考えにちょっと反抗します!!)
私はマニュアルに従っているようです:http://www.gnu.org/software/hello/manual/automake/Linking.html#Linking
しかし、明らかに私はどこかを台無しにしたので、どんなアイデアでも大歓迎です!!
ありがとう
PH
編集:ライブラリ自体は機能しているようですが、リンクの問題のようです。テストケースプログラムをそれらに対してリンクできます。これが私がすることです:
フォルダー src/common/tests には、単体テストを実行する common-tests.cpp というメインがあります。common-tests ビンは、ライブラリ libube-common.a に対してリンクされています (これらは単体テストであるため、ライブラリ内にあるオブジェクトのみが必要です)。
make check を実行すると、テスト プログラムは次のようにコンパイルされます。
そして、物事は完璧に機能します。私が見ることができる唯一の違いは、この場合、ライブラリがリンクする実行可能ファイルのすぐ隣にあるということです...これは本当に違いを生むでしょうか?
また、-Wl,--whole-archive などのオプションを使用してみましたが、役に立ちませんでした (さらに、それらを Automake によって生成された行に追加する方法がわかりません ...)
shared-libraries - Automake と標準の共有ライブラリ
libtool化されたものではなく、automakeに標準の共有ライブラリを作成させるにはどうすればよいですか? 通常、abc.so
フル パスで参照され、メイン プログラムに読み込まれる を作成します。AMに同じことを強制する方法はありますか? _LIBRARY としてリストすると、automake は次のように文句を言います。'abc.so' is not a standard library name; did you mean 'libabc.a'
明確にするために:はい、.so
サポートのみが必要です-静的ではありません。はい、カスタム ファイル名が必要です。
c++ - バージョンとアーチ情報をC++ソースに挿入するための最良の方法は何ですか?
C++プログラムに「--version」オプションを含めて出力させたいのですが。
- コンパイルされたアーキテクチャ
- ソースのバージョン(例:v0.1.0)
- アプリケーションの名前
また、autoconf / automakeを初めて使用していますが、configure.acにバイナリとバージョンの両方があることに気付きました。現在、アーキテクチャ情報は含まれていません。複数のアーチの下でコンパイルするため、このような情報を追加したくありません。
ヘッダーまたはソースファイルへのバージョン/アーチ/アプリ名情報の挿入を自動化する簡単な方法はありますか?ほとんどのC++コーダーはこれをどのように行いますか?
c++ - 複数のシステムで同時に、別々のアーキテクチャのプロジェクトをビルドするために autotools をどのようにセットアップしますか?
automake と autoconf を使用する C++ プロジェクトがあります。私はこれらの両方に慣れていません。
私のホーム ディレクトリはネットワークにマウントされており (すべてのサーバーで同じ)、プロジェクト (およびその実行可能ファイル) を別々のマシンで同時にコンパイルして実行したいと考えています。
私たちのサーバーは、しばしば異なるアーキテクチャです。私のデスクトップは 32 ビットですが、サーバーは 64 ビットなどです。
マシン アーキテクチャの名前が付けられた別のディレクトリにあるオブジェクト ファイルをコンパイルするにはconfigure.ac
、どのオプションを使用すればよいですか? Makefile.am
通常の Makefile でこれを行うのは比較的簡単ですが、自動ツールの設定方法がわかりません。