2016-12-02 9 views
0

私は以下のMakefileに書きましたが、ヘッダーファイルの依存関係についてはthis questionに追加された回答がありますが、動作していません。私はきれいにしてからビルドします。その後、私はTouchコマンドを使ってParse.hを修正し、Test.exeが最新であることを示す "make all"を実行しました。私はちょうど "make"コマンドでも同じ結果を得ました。ヘッダーファイルの依存関係が動作しない

誰でも私が間違っている場所を教えてください。あなたはsptestの中.oファイルを期待しているように見える

RM  := rm -rf 
MKDIR := mkdir -p 
FIND := find 
CPIO := cpio 
CD  := cd 
MV  := mv 

# Set compiler flags 
ifeq ($(BUILD_TYPE),DEBUG) 
     COMPILE_FLAGS= -c -fpic -DDBG=1 -g -DUSE_UTLPATMAT=1 -Wall 
else ifeq ($(BUILD_TYPE),RELEASE) 
     COMPILE_FLAGS= -c -fpic -O3 -DUSE_UTLPATMAT=1 -Wall 
else ifeq ($(BUILD_TYPE),PERF) 
     COMPILE_FLAGS= -c -fpic -O3 -DUSE_UTLPATMAT=1 -DPERF_COMPONENT -Wall 
else 
     COMPILE_FLAGS= -c -fpic -O3 -DUSE_UTLPATMAT=1 -Wall 
endif 

export STFP_HOME = $(shell cd "$(CURDIR)/.."; pwd) 
STFP_LIB = $(STFP_HOME)/lib 
STFP_BIN = $(STFP_HOME)/bin 

$(shell mkdir -p ${STFP_LIB}) 
$(shell mkdir -p ${STFP_BIN}) 


STFP_INC = $(CURDIR)/SP 

SPTEST_SRC = $(CURDIR)/SPTest 
SPTEST_INC = $(CURDIR)/SPTest 

STFP_SRC = $(CURDIR)/SP 
STFP_INC = $(CURDIR)/SP 

UTILITIES_SRC_DIR = $(CURDIR)/../utilities 


LIBS= -L${CLIENT_LIB} 


INCS_DIRS= -I${CLIENT_INC} 


#Subdivision Publisher Test 
SPTESTSRCS=\ 
$(SPTEST_SRC)/Parse.cpp \ 
$(SPTEST_SRC)/Main.cpp 


SPTESTOBJS=$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SPTESTSRCS))) 

all := $(STFP_BIN)/Test.exe 


#################### Main targets ##################################### 
all:$(all) 
clean: 
    find $(STFP_SRC)/ -name "*.o" | xargs rm -rf 
    find $(SPTEST_SRC)/ -name "*.o" | xargs rm -rf 
    rm -rf $(STFP_LIB) 
    rm -rf $(STFP_BIN) 

####################################################################### 


$(STFP_BIN)/Test.exe: $(SPTESTOBJS) 
    $(CXX) -g $(INCS_DIRS) \ 
    $(SPTESTOBJS) -o [email protected] \ 
    $(LIBS) -lmodpbase64 -lboost_regex -lboost_filesystem -lboost_system -lboost_serialization \ 
    -lutility 

%.o : %.cpp 
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o [email protected] $< 

%.o : %.c 
    $(CC) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o [email protected] $< 


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

depend: .depend 
.depend: $(SPTESTSRCS) 
    rm -f .depend 
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -MM -$(SPTESTSRCS) > .depend 

-include .depend 

######################################################## 

おかげ

+0

'make -d'を使って、' make'が何をするのかに関する多くのデバッグ情報を見てください。また、 'SPTESTOBJS'が正しいと確信していますか?ダミーターゲットを作成して印刷してみてください。 '.depend'の依存関係は正しいですか?あなたはそれをチェックしましたか? –

+0

.dependファイルをチェックしたところ、正しく表示されています。また、Parse.cppを変更すると通常のビルドが正常に機能しているので、Parse.cppだけが再コンパイルされ、リンクされてSPTESTOBJSが正しいはずです。 – user3494614

答えて

1

SPTest/%.o: SPTest/%.cpp 
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o [email protected] $< 

OR(@Dがディレクトリで、@Fはファイル名です)を使用してを:あなたは使ってそうすることができ

%.o : %.cpp 
    $(CXX) -DPROVIDE_LOG_UTILITIES $(COMPILE_FLAGS) $(INCS_DIRS) -o $(@D)/$(@F) $< 

をあなたはまだエラーを取得する場合、私に教えてください。

+0

既に 'COMPILE_FLAGS'に' -c'があります。 – Beta

+0

@Beta、Noted。 Tx。 – blackpen

関連する問題