問題タブ [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.
bison - 生成されたファイルを配布に追加する最良の方法は?
autoconf / automakeを使用した非常に複雑な(C ++)プロジェクトがあります。これには、いくつかの「生成された」ファイル(foo.yy-> foo.cc)が含まれています。実際のビルドは、さまざまなプラットフォームで「制御スクリプト」(概念に精通している人のためのGentoo .ebuild)を使用して行われます。
現在、ターゲットプラットフォームの1つはfoo.yy-> foo.ccステップを適切にサポートしておらず、Linuxボックスで生成されたfoo.ccファイルを使用する必要があります。
今、私はこれについて行く2つの方法があります:
1)foo.ccをプロジェクトリポジトリにチェックインし、configure.in(またはその他)にパッチを適用してfoo.yy / foo.ccにタイムスタンプチェックを含め、問題のターゲットで古いターゲットで実行すると、わかりやすいエラーメッセージを生成します。 foo.cc;
2)foo.ccを制御スクリプトリポジトリにチェックインし、スクリプト制御のタイムスタンプを取得して、エラーメッセージを表示します。
2)問題ありませんが、foo.ccを配置するのに適切な場所ではないと思います。
一方、私はautoconf / automakeについてあまり知りませんし、configure.in(またはどこでも)にタイムスタンプチェック/エラーメッセージを実装する方法を知りません。
あなたの提案は何ですか、そしてここの誰かが解決策1)について行く方法を知っていますか?
編集:解決策3)を使用して解決し、foo.yy->foo.ccステップ自体を実行できるようになるまで問題のあるターゲットボックスを微調整します。私の問題は解決しました。
しかし、私は質問を開いたままにしておきます-autoconf / automakeでタイムスタンプチェック/わかりやすいエラーメッセージを実行する方法は?
msbuild - なぜautoconf/automakeプロジェクトはローカル開発ライブラリではなくインストールされたライブラリに対してリンクするのですか?
libgdata
いくつかのテストとインストールされていないプログラムを含むライブラリを作成しています。ライブラリを一度インストールすると、プログラムがローカルバージョンではなく、インストールされたバージョンにリンクしているように見えるという問題が発生しています../src/libgdata.la
。
何が原因でしょうか?私はひどく間違ったことをしていますか?
これが私のtest/Makefile.am
見た目です:
(libapiutil
libcurlとlibxml ++を処理するためのいくつかのヘルパーのものを持っている別のライブラリです)
したがって、たとえば、何もインストールせずにテストを実行すると、すべてが正常に機能します。ローカルで変更を加えることができ、それらはすぐにこれらのプログラムによって取得されます。
パッケージをインストールすると、これらのプログラムはコンパイルされますが(実際には、ヘッダーをローカルで検索しているように見えます)、プログラムを実行すると、シンボルの欠落について文句を言います。
私の知る限り、make出力に基づいて新しく構築されたライブラリ(../src/libgdata.la)とリンクしているので、なぜこれが発生するのかわかりません。インストールされたファイルを削除すると、src/*へのローカルの変更は問題なく取得されます。
以下にgdatacalendarのmake出力を含めました。
ヘルプ。:)
アップデート
addCommonRequestHeader()
メソッドなしでライブラリをインストールした後、Serviceクラスにメソッドを追加したときにカレンダープログラムを実行しようとすると、次のメッセージが表示されaddCommonRequestHeader()
ます。
変数の設定を試みるというEugeneの提案$LD_LIBRARY_PATH
は役に立ちませんでした。
更新2
私は2つのテストを行いました。まず、dev-installディレクトリ(--prefix)を吹き飛ばした後にこれを行いました。その場合、が作成されますtest/.libs/lt-gdatacalendar
。ただし、ライブラリをインストールすると、test/.libs/gdatacalendar
代わりにライブラリが作成されます。lddの出力は、1つの例外を除いて、両方で同じです。
これにより、ある場合にはlt-gdatacalendarが作成され、別の場合にはgdatacalendarが作成される原因は何でしょうか。
libgdataでのlddの出力は次のとおりです。
macos - LTLIBRARIES: mv *.Tpo *.Plo ですが、前者は存在せず、後者は既に存在します
私は既存のライブラリ(libtcod)をAutotools(OS Xの幸福のために)にかなり簡単に変換しています。残念ながら、Makefile.am
のlib_LIBRARIES
ルールをに切り替えるlib_LTLIBRARIES
と、ビルドは成功から失敗に変わります。以下の出力からの抜粋:
src/Makefile.am
次のようになります。
src/.deps
内容:
ここで明らかな間違いを犯していますか、それともこれでうまくいくのでしょうか?
php - OS X でソースから PHP 5.2.10 をビルドするときの libresolv のリンク エラー
まず、通常は事前にコンパイルされた PHP のバイナリを使用することを選択しますが、特定のビジネス ニーズのためにソースからビルドする必要があります。(私は、オープンソースのアプリをただの遊びのためにコンパイルするタイプではありません。)
make
OS X 10.6 でビルドしていますが、 PHP 5.2.10 を Apache モジュール ( --with-apxs2
)として使用しようとすると、次のエラーが発生します。
これらの記号は、OS X にlibresolv
含まれている の一部です (少なくとも10.4 以降は含まれています)。files は Linux 上のファイルに相当する Mac であることに注意してください。私は に渡すことで既にコンパイルに成功しています。これにより、ライブラリの同様のリンカ エラーが解消されました。/usr/lib/libresolv.dylib
*.dylib
*.so
libiconv.dylib
--with-iconv=shared,/usr
./configure
iconv
を実行すると、メイクファイルで./configure
それが検出され、有効になります。/usr/include/resolv.h
ただし、共有ライブラリを正しくリンクする方法がわかりません。それを機能させるためのヒントはありますか?カスタム リンカー フラグを に渡すようなことはしたこと./configure
がありません。残念ながら、この問題について Google は役に立ちませんでした。
編集: Snow Leopard でエラーを再現したい場合は、この TAR ダウンロードから構築しています。
autotools - autotools を Intel コンパイラーでコンパイルするにはどうすればよいですか?
configure 引数に応じて、Intel コンパイラーまたは gcc/g++ でコードをコンパイルしたいと考えています。これは可能ですか?これを実現するには、configure.ac および Makefile.am ファイルに何を入れる必要がありますか?
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
か?
makefile - GNU Makeを学ぶ価値はありますか?
最近、ビルドツールを学ぶ必要性を感じています。推奨事項について StackOverflow を調べていますが、Gnu Make についてはほとんど言及されていません。代わりに、Ant、Maven、CMake、Scon などを目にします。ただし、時々コンパイルしなければならない小さな「不正なソース」(リポジトリにないものなど) を見ると、それらすべてにmake && make install
手順が必要です。
学習は、別のツールを学習するよりも時間の無駄遣いになりますか?
もしそうなら、なぜMakeは今でも人気があるのでしょうか?
autotools - Autotools を使用したプリコンパイル済みヘッダー
automake / libtool を使用するプロジェクトで gcc プリコンパイル済みヘッダーを使用することは可能ですか?
新しい make ルールを追加してプリコンパイル済みヘッダーを作成することは難しくありません。問題は、libtool によって導入されたコンパイル フラグも追加する必要があり、AFAIK ではヘッダー入力ファイルを処理できないことです。
どうやってそれができる?
c++ - C++ライブラリのディレクトリ構造
私はC++ライブラリに取り組んでいます。最終的には、いくつかの例とPythonバインディングとともに、複数のプラットフォーム(少なくともLinuxとWindows)で公開できるようにしたいと思います。作業は順調に進んでいますが、現時点ではプロジェクトは非常に面倒で、Visual C ++専用に構築されており、マルチプラットフォームではありません。
したがって、クリーンアップが必要だと感じています。私が最初に改善したいのは、プロジェクトのディレクトリ構造です。Automakeツールに適した構造を作成して、複数のプラットフォームで簡単にコンパイルできるようにしたいのですが、これまで使用したことがありません。Visual Studioで(ほとんどの)コーディングを引き続き行うため、VisualStudioプロジェクトとソリューションファイルも保持する場所が必要になります。
「C++ライブラリのディレクトリ構造」などの用語をグーグルで検索しようとしましたが、何も役に立たないようです。非常に基本的なガイドラインをいくつか見つけましたが、明確な解決策はありませんでした。
いくつかのオープンソースライブラリを見ていると、私は次のことを思いつきました。
私はマルチプラットフォーム開発/オープンソースプロジェクトの経験がまったくないか、ほとんどありません。そのようなプロジェクトを構築する方法についての適切なガイドラインが見つからないことに非常に驚いています。
このようなライブラリプロジェクトを一般的にどのように構成する必要がありますか?何を読むことをお勧めしますか?良い例はありますか?
autoconf - autoconf/automake を非標準パッケージに向ける方法
RedHat Linux ボックスで ZooKeeper をビルドしようとしています。(ZooKeeper が正確に何であるかは、おそらく重要ではありません :-)
パッケージの指示に従うと、次のようになります。
CPPPUNIT を標準の場所にインストールできません。(ルート権限を持たないでください。システム チームには、標準構成から「逸脱しない」というポリシーがあります。)
configure.ac ファイル内の Tへの参照をコメント アウトすることでこの問題を回避しました
AM_PATH_CPPUNI
が、実際にやりたいことは、自分の個人用ディレクトリに CPPPUNIT をインストールしてそれを指すことですが、あまり効果がありません。 autoconf/auotmake システムに非標準の場所を探すように指示する方法を考え出す作業が進んでいます。それを行う方法についてのヒントはありますか?