PostgreSQLのストレージマネージャモジュールにいくつかの機能を追加しようとしています。 私はすでにsmgrフォルダにいくつかのソースファイルを追加しました。そして、Makeシステムに、その名前をsmgrフォルダ内のMakefileのOBJSリストに追加することでそれらを組み込むことができました。 (つまり、A.cを追加すると、A.oをOBJSリストに追加します)。Makefileを使ってPostgresqlに新しいソースコードファイルを追加する
正常に動作していました。今私は新しいファイルhdfs_test.cをプロジェクトに追加しようとしています。このファイルの問題は、コンパイルコマンド(-Iおよび-Lディレクティブ)にいくつかのディレクティブが必要であることです。
gccのコマンドは次のとおりです。
gcc hdfs_test.c -I/HDFS_HOME/hdfs/src/c++/libhdfs -I/usr/lib/jvm/default-java/include -L/HDFS_HOME/hdfs/src/c++/libhdfs -L/HDFS_HOME/build/c++/Linux-i386-32/lib -L/usr/lib/jvm/default-java/jre/lib/i386/server -ljvm -lhdfs -o hdfs_test
したがって、単にOBJSリストにhdfs_test.oを追加することはできません。 私はこのように見えるようにMakefileを編集してみました:
OBJS = md.o smgr.o smgrtype.o A.o B.o hdfs_test.o
MyRule1 : hdfs_test.c
gcc tati.c -c -I/diskless/taljab1/Workspace/HDFS_Append/hdfs/src/c++/libhdfs -I/usr/lib/jvm/default-java/include -L/diskless/taljab1/Workspace/HDFS_Append/hdfs/src/c++/libhdfs -L/diskless/taljab1/Workspace/HDFS_Append/build/c++/Linux-i386-32/lib -L/usr/lib/jvm/default-java/jre/lib/i386/server -ljvm -lhdfs
それがうまくいかなかった、と私はディレクティブを含めずにhdfs_test.cをコンパイルしようとしているメイクのエラーメッセージが出続けました。
hdfs_test.cのコンパイルディレクティブを含めるにはどうすればよいですか?
おかげ
こんにちはクレイグ..もう少し詳しくお聞かせください。 まず、余分なインクルードフォルダを$(LIBS)に追加するにはどうすればよいですか? LIBS =/IncludeFolder1:/ IncludeFolder2を内側のメークファイル(フォルダsmgr内のファイル)内に作成できますか? Makefile.global.inもチェックして、LDFLAGSにリンクフォルダを追加する場所を正確にはわかりませんでした。 は、例えば、私はこれが見つかりました: のifdef PGXS LDFLAGS = -L $(LIBDIR) 他 LDFLAGS = -L $(top_builddir)/ SRC /ポート endifの LDFLAGSを+ =が が、私はこの後に追加することはでき@LDFLAGS: LDFLAGS + =/LinkFolder1そしてLDFLAGS + =/LinkFolder2? その後、autoconfはどのように使用しますか? ありがとう – Ticker23
OBJSにファイルを追加する以外は、Makefileを直接操作しないでください。作成した 'Makefile'に' configure'を追加して$(LIBS)を修正してください。 autoconfの詳細については、多くのチュートリアルとドキュメンテーションの1つを見ることをお勧めします。 基本的には、自動作成と作業の仕方を学ぶ必要があります。それは私がStackOverflowコメントで教えることができるものではありません。チュートリアルを参照してください。 –
また、内部makefileから 'LIBS'に追加することはできません。なぜなら、再帰的makeは変数の変更を呼び出しツリーにバックアップして伝播しないからです。 'postgres'のリンカが呼ばれている' Makefile'からやるべきです - より良い方法は 'configure 'を' $(LIBS) 'に' Makefile.in'。 –