問題タブ [autoconf]

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.

0 投票する
1 に答える
123 参照

makefile - Makefile の「アット シンボル」を含むこれらの変数は何を意味しますか?

これに関するドキュメントは見つかりませんでした。Makefile で見つかった「アット」記号を含むこれらの変数は正確には何ですか? 例:

0 投票する
1 に答える
14872 参照

autotools - Autoconf -- 静的ライブラリを含む (初心者向け)

アプリケーションを手動ビルドから autoconf に移行しようとしていますが、これはこれまでのところ非常にうまく機能しています。しかし、統合方法がわからない静的ライブラリが 1 つあります。そのライブラリは、通常のライブラリの場所には配置されません。バイナリ (.a ファイル) とヘッダー (.h ファイル) の場所は、configure 引数として指定されます。(特に、.a ファイルを /usr/lib またはその他の考えられる場所に移動しても、機能しません。) また、伝統的に名前が付けられていません (「lib」または「l」で始まっていません)。 」)。

手動コンパイルはこれらで機能します (ディレクトリは予測できません - これは単なる例です):

(ええと、実際には、.a ファイルが -L などを使用せずに直接参照される理由がわかりません。はい、C プログラムの構築について中途半端な理解があります。)

したがって、configure.ac では、関連する構成引数を使用して、AC_CHECK_HEADER を使用してヘッダー (.h ファイル) を正常に見つけることができます。次に、AC_CHECK_HEADER 内で CPFLAGS に場所を追加し、実際の C コードのヘッダー ファイルの #include がそれを適切に取得します。

$location に配置された configure 引数と、必要なファイルの名前が helper.h および helper.a (両方とも同じディレクトリにあります) である場合、これまでの動作は次のとおりです。

問題が発生するのは、バイナリ (.a ファイル) をリンクすることです。何をしようとしても、そのライブラリの関数呼び出しへの未定義の参照に関するエラーが常に発生します。Cコードに大騒ぎし、そのライブラリへの関数呼び出しで意図的なエラーを作成して、関数プロトタイプがロードされ、コンパイルに使用されたことを示す以前のエラーを生成する可能性があるため、リンケージの問題であると確信しています。

.a ファイルを含む場所を LDFLAGS に追加してから、AC_CHECK_LIB を実行しようとしましたが、見つかりません。

構文が間違っているか、もっと基本的なことが抜けているのかもしれません。

これが私が試したことです:

サイコロはありません。AC_CHECK_LIB は -lhelper を探していると思います (または libhelper?) ので、それが問題かどうかわからないので、これも試してみました (AC_CHECK_LIB を省略し、.a を LDFLAGS に直接含めます)、運が悪い:

手動コンパイルをエミュレートするために、 -L を削除しようとしましたが、それは役に立ちません:

他の組み合わせや順列を試してみましたが、もっと基本的なものが欠けているのではないかと思います....

================ 更新

次のように _LDADD を使用して、Makefile.am の .a ファイルへのハードコードされたパスで動作するようにしました。

しかし、.a ファイルの場所を予測できません。なんらかの理由で、configure.ac で myprog_LDADD を定義しても機能せず (できれば、動的な場所変数を使用できるので)、LDFLAGS、myprog_LDFLAGS、AM_LDFLAGS への変更の組み合わせが機能しないようです。

Makefile.am で、configure.ac で定義されている変数の場所を使用しようとすると、機能しません。

================ 更新

私はそれを理解したと思いますが、自分が何をしているのかわからないので、フィードバックをいただければ幸いです. AC_SUBST() を使用して myprog_LDADD を configure.ac から動作させたので、最終的な解決策は次のようになります。

0 投票する
6 に答える
127051 参照

makefile - CFLAGS 対 CPPFLAGS

CPPFLAGS はプリプロセッサによって使用されるのに対し、CFLAGS (または C++ の場合は CXXFLAGS) はコンパイラ用であることを理解しています。

しかし、私はまだ違いを理解していません。

#include でインクルードされるヘッダー ファイルのインクルード パスを指定する必要があります。

どのような状況でコンパイラに追加のインクルード パスを与える必要がありますか?

一般に、プリプロセッサが必要なヘッダー ファイルを見つけてインクルードする場合、追加のインクルード ディレクトリについて通知する必要があるのはなぜですか? CFLAGS はどのような用途に使用されますか?

(私の場合、実際には、これらの両方でプログラムをコンパイルできることがわかりましたこれにより、混乱が増します... CFLAGSまたはCPPFLAGS を使用して目標を達成できます (少なくとも autoconf コンテキストで)。何が得られますか?)

0 投票する
3 に答える
5264 参照

emacs - ltmain.sh とは何ですか?なぜ automake はそれが見つからないと言うのですか? 優れた自動 (make/conf/etc) ジェネレーターとは?

auto(make/conf/...) が自動的に生成されたものを使用して、LinuxでCアプリを開発したいだけです。edeとanjutaで生成してみましたが、Makefile.amが生成されないようです。そこで、automake を実行してみましたが、「ltmain.sh」が見つかりませんと表示されます。Linux C/C++ アプリ用の基本的なビルド ファイルを簡単に生成できるものはありますか。標準的な慣行は何ですか?ほとんどの人はこれらのファイルを自分で作成しますか?

0 投票する
1 に答える
762 参照

apache - Apacheおよびconf.dインストールプロセスのAutoconfマクロ?

autotoolsを使用してビルドおよびインストールするパッケージがあります。パッケージの一部は、ローカルマシンで実行できるWebサイトです。そのため、パッケージには、/ etc / apache2/conf.dディレクトリにコピーまたはリンクすることを目的とした.confファイルが含まれています。パッケージがこれを行う標準的な方法は何ですか?可能であれば、ユーザーがWebサイトを機能させるための余分な手順を踏まないようにしたいと思います。パッケージをインストールしてから、 http:// localhost/newpackageを参照して起動して実行できるようにしたいと思います 。

また、autoconfがapacheのインストールについて知る方法や、その後の環境を介した標準的な方法はありますか?誰かが私を正しい方向に向けることができれば、それは素晴らしいことです。

スティーブ

0 投票する
2 に答える
1004 参照

makefile - configure.in: AM_DISABLE_SHARED が Makefile を変更しない

私は Makefiles と autoconf を使用することに非常に慣れていません。Camellia イメージ ライブラリを使用しており、コードをそのライブラリに静的にリンクしようとしています。Camellia イメージ ライブラリで「make」を実行すると、/usr/local/lib ディレクトリ内に libCamellia.a、.so、.la、および .so.0.0.0 ファイルが作成されます。これは、ライブラリを使用してコードをコンパイルするために使用するコマンドです。

これは問題なく動作しますが、静的にリンクしようとすると、次のようになります。

Camellia のソース コードを変更しようとしていて、自分のバージョンと彼らのバージョンを比較したいので、静的にリンクしたいと考えています。それで、グーグルで調べた後、 AM_DISABLE_SHARED をconfigure.inファイルに追加してみました。しかし、./configure を実行した後でも、まったく同じ Makefile が得られます。「make install」した後でも、上記と同じ結果が得られます。

オリジナルの Camellia ソース コードをコンパイルしたバージョンと、変更したバージョンのコードの 2 つのバージョンを取得する簡単な方法は何ですか? 静的ライブラリが機能するはずだと思います。静的ライブラリを機能させる簡単な方法はありますか、それとも私の問題に対する他の簡単な解決策はありますか? 自分のバージョンを元のバージョンと比較するたびに、「make」と「make install」を再実行したくありません。

0 投票する
1 に答える
1134 参照

c - `some_foo' への C 未定義参照

gtk+ アプリに 3 つのファイルがあります。

main.c:

mainwindo.h

MainWindow.c

メイン関数を呼び出しsome_fooてコンパイルしようとすると、エラーが表示されます:「some_foo」への未定義参照。どうしたの?

ありがとうございました。

0 投票する
2 に答える
429 参照

autotools - AC_CONFIG_SRCDIR 内のスペースを含むパスをエスケープするにはどうすればよいですか

スペースを含む AC_CONFIG_SRCDIR にいくつかのパスを含める必要があります。どうすればそれらを逃れることができますか? たとえば、「some file.in」がある場合、次のように宣言する必要があります。

AC_CONFIG_SRCDIR[何らかのファイル]

0 投票する
1 に答える
933 参照

c++ - C++0x 機能で autoconf を使用する方法

移植性と保守性を最大化するために、および他の TR1/BOOST C++0x テンプレートとautoconf組み合わせて使用​​するためのベスト プラクティスは何ですか?shared_ptr

がおよび/またはとして利用可能autoconfかどうかを判断できます。同じ機能に 2 つの異なる名前があることを考えると、次の質問があります。shared_ptrstd::tr1::shared_ptrboost::shared_ptr

  1. コードでは、どのshared_ptrように参照する必要がありますか?
  2. std::tr1::shared_ptrよりも優先する必要がありboost::shared_ptrますか?

shared_ptrまず、コードは現在、プリプロセッサ条件を使用して、への非修飾参照を許可しています。

次に、コードはstd::tr1::overboost::を使用して、外部ライブラリへの依存を最小限に抑えます (ライブラリが広く使用されている場合でも)。

これらの 2 つのソリューションは一般的ですか? より良いものはありますか?

0 投票する
4 に答える
4302 参照

linux - AutoconfでLinuxのバージョンを確認するには?

私のプログラムには少なくとも Linux 2.6.26 が必要です (timerfd とその他の Linux 固有の機能を使用しています)。

このマクロの書き方については大まかな考えはありますが、Autoconf 用のテスト マクロの書き方については十分な知識がありません。アルゴリズム:

  1. 「uname --release」を実行して出力を保存する
  2. 出力を解析し、Linux のバージョン番号 (MAJOR.MINOR.MICRO) を減算します。
  3. バージョン比較

コマンドを実行し、出力を保存して解析する方法がわかりません。

そのようなマクロが既に存在し、利用可能である可能性があります (何も見つかりませんでした)。