0

私は他のプログラマーによって生成された次の3つのmakefileを持っています。開始と終了のマークを付けたコードを含めました。このコードは、libspatialインデックスライブラリを含めることを目的としています。他のプログラマーは階層ルートディレクトリ---->ツール--->rを持っています

MakeFile1はrに対応し、MakeFile2はツールに対応し、MakeFile3はrootに対応します

ライブラリを含めると、次のエラーが発生します。

make all 
make: *** No rule to make target `bin//home/NP/rtree/spatialindex-src-1.8.0/src/storagemanager/DiskStorageManager.cc', needed by `bin/rdf3xload'.  Stop. 

どんな間違いをしたのか理解できません。誰かが私を助けるのに十分親切になれますか?

MakeFile 1

src_tools_r:=               \
    tools/r/r.cpp       \
    tools/r/Sorter.cpp      \
    tools/r/StringLookup.cpp    \
    tools/r/TempFile.cpp      \
    /home/NP/rtree/spatialindex-src-1.8.0/src/storagemanager/DiskStorageManager.cc

#Code which I wrote in order to include my library --begin
# for CS machines
COURSE_DIR = /home/NP/rtree/spatialindex-src-1.8.0/.libs
LIB_DIR     = /usr/local/lib

CPPFLAGS        = -I. \
                  -I$(COURSE_DIR)

LDFLAGS         = -L. \
                  -L$(COURSE_DIR) \
                  -R $(LIB_DIR):$(COURSE_DIR)

LDLIBS          = -lspatialindex
#Code which I wrote in order to include my library --end    

$(PREFIX)r$(EXEEXT): $(addprefix $(PREFIX),$(src_tools_r:.cpp=$(OBJEXT)) $(src_infra:.cpp=$(OBJEXT)) $(src_rts:.cpp=$(OBJEXT)) $(src_cts:.cpp=$(OBJEXT)))
    $(buildexe)

MakeFile2

include tools/r/MakeFile1

src_tools:=             \
    $(src_tools_r)      \

#Code which I wrote in order to include my library --begin
# for CS machines
COURSE_DIR = /home/NP/rtree/spatialindex-src-1.8.0/.libs
LIB_DIR     = /usr/local/lib

CPPFLAGS        = -I. \
                  -I$(COURSE_DIR)

LDFLAGS         = -L. \
                  -L$(COURSE_DIR) \
                  -R $(LIB_DIR):$(COURSE_DIR)

LDLIBS          = -lspatialindex
#Code which I wrote in order to include my library --end

** MakeFile3

# Include platform dependent makefiles
ifeq ($(OS),Windows_NT)
include Makefile.nt
else
include Makefile.unix
endif

PREFIX:=bin/

#############################################################################
# Default target
all: $(PREFIX)rd$(EXEEXT) $(PREFIX)r$(EXEEXT) $(PREFIX)rq$(EXEEXT) $(PREFIX)ru$(EXEEXT) $(PREFIX)re$(EXEEXT) $(PREFIX)ro$(EXEEXT)

#############################################################################
# Collect all sources


ifeq ($(LINEEDITOR),1)
src_lineeditor:=lineeditor/LineInput.cpp lineeditor/LineEditor.cpp lineeditor/Terminal.cpp lineeditor/Display.cpp lineeditor/Buffer.cpp
endif

include tools/Make2


source:=$(src_cts) $(src_infra) $(src_rts) $(src_tools) $(src_lineeditor)

#############################################################################
# Dependencies

generatedependencies=$(call nativefile,$(PREFIX)makeutil/getdep) -o$(basename $@).d $(IFLAGS) $< $(basename $@)$(OBJEXT) $(genheaders) $(GENERATED-$<)

ifneq ($(IGNORE_DEPENDENCIES),1)
-include $(addprefix $(PREFIX),$(source:.cpp=.d)) $(addsuffix .d,$(basename $(wildcard $(generatedsource))))
endif

#############################################################################
# Compiling

#Code which I wrote in order to include my library --begin
# for CS machines
COURSE_DIR = /home/NP/rtree/spatialindex-src-1.8.0/.libs
LIB_DIR     = /usr/local/lib

CPPFLAGS        = -I. \
                  -I$(COURSE_DIR)

LDFLAGS         = -L. \
                  -L$(COURSE_DIR) \
                  -R $(LIB_DIR):$(COURSE_DIR)

LDLIBS          = -lspatialindex



compile=$(CXX) -c $(TARGET)$(call nativefile,$@) $(CXXFLAGS) $(CXXFLAGS-$(firstword $(subst /, ,$<))) $(IFLAGS) $(IFLAGS-$(firstword $(subst /, ,$<))) $(call nativefile,$<)

$(PREFIX)%$(OBJEXT): %.cpp $(PREFIX)makeutil/getdep$(EXEEXT)
    $(checkdir)
    $(generatedependencies)
    $(compile)

#############################################################################
# Cleanup

clean:
    find bin -name '*.d' -delete -o -name '*.o' -delete -o '(' -perm -u=x '!' -type d ')' -delete

#############################################################################
# Executable

$(PREFIX)query: $(addprefix $(PREFIX),$(source:.cpp=$(OBJEXT)))

#Code which I wrote in order to include my library --end
4

1 に答える 1

0

これが独立したライブラリである場合は、独自の Makefile が必要であり、単独でビルドする必要があります。

ソースをメイン ビルド プロセスに統合する場合は、その構造に準拠する必要があります。

あなたが持っている

  • 別の c++ ソース接尾辞.ccvs.cpp
    これは、ソース ファイルの名前を に変更することで簡単に解決できます.cpp
  • 絶対パス/home/NP/rtree/...vs 相対パスtools/r/...
    これには、ツリー全体をメイン ビルド ツリーに移動する必要があります。これは、ルールがそこからディレクトリにアクセスできることを想定しているためです。

しかし、ライブラリ Makefile を用意して、それをメイン ビルドに統合するのが最善だと思います。

残念ながら、変数 X を変更して行 Y を移動するような簡単な答えはありません。同僚と一緒に座って、この Makefile の問題を一緒に解決することをお勧めします。

于 2013-02-22T21:35:37.287 に答える