我正在爲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
因此,簡單地增加hdfs_test.o到OBJS列表不起作用。 我試着編輯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不包括指令的錯誤消息。
我該如何執行Make來包含hdfs_test.c的編譯指令?
感謝
嗨克雷格..你能請詳細說明一些細節嗎? 首先,如何將額外的包含文件夾添加到$(LIBS)? 我可以在內部生成文件(文件夾smgr中的文件)中執行如下操作:LIBS =/IncludeFolder1:/ IncludeFolder2? 我也檢查了Makefile.global.in,並不知道將鏈接文件夾添加到LDFLAGS的確切位置。 例如,我發現這一點: IFDEF PGXS LDFLAGS = -L $(LIBDIR) 否則 LDFLAGS = -L $(top_builddir)/ src目錄/端口 ENDIF LDFLAGS + = @LDFLAGS 我可以在此之後添加: LDFLAGS + =/LinkFolder1然後LDFLAGS + =/LinkFolder2? 之後,我該如何使用autoconf? 謝謝 – Ticker23
除了將文件添加到OBJS之外,不要直接混淆Makefiles。修改$(LIBS),讓'configure'將它們添加到它生成的'Makefile'中。要了解更多關於autoconf的信息,我建議你看看其中的一個教程和文檔。基本上,你需要學習autoconf如何工作;這不是我可以在StackOverflow評論中教的東西。看教程。 –
另外:你不能從內部makefile加入'LIBS',因爲recursive make不會傳播變量變化備份調用樹。你必須從調用'postgres'的鏈接器的'Makefile'或更好的'makefile'中執行它,或者通過修改configure來添加到'Makefile'中的'$(LIBS)'' Makefile.in'。 –