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를 추가하면 작동하지 않습니다. I는 다음과 같이하기 위해 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)에 추가 포함 폴더를 어떻게 추가합니까? 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에 대해 더 많은 것을 배우기 위해 많은 튜토리얼과 문서 중 하나를 살펴 보는 것이 좋습니다. 기본적으로 autoconf를 만들고 작동시키는 법을 배워야합니다. 그건 내가 StackOverflow 주석에서 가르 칠 수있는 것이 아닙니다. 자습서를 참조하십시오. –
또한 내부 makefile에서'LIBS'에 추가 할 수 없습니다. 왜냐하면 재귀 적 make는 변수 변경을 전파하여 호출 트리를 백업하기 때문입니다. 'postgres'에 대한 링커가 호출되는'Makefile'에서해야합니다 - 더 좋은 방법은 configure를 수정하여'$ (LIBS)'에'Makefile'에서 생성 한' Makefile.in'. –