2016-05-23 93 views
1

對於我的生命工程的Makefile問題,我無法弄清楚如何刪除MV語句下面的Makefile與谷歌測試

TEST_DIR = ../gtest 
USER_DIR = src 
TESTS_DIR = tests 
OBJ_DIR = obj 

CPPFLAGS += -isystem $(GTEST_DIR)/include -I$(USER_DIR) 

CXXFLAGS += -g -Wall -Wextra 

TESTS = test 

GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ 
       $(GTEST_DIR)/include/gtest/internal/*.h 

all : $(TESTS) 

clean : 
    rm -rf obj 
    rm -rf bin 
    mkdir obj 
    mkdir bin 

GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) 

$(OBJ_DIR)/gtest-all.o : $(GTEST_SRCS_) 
    $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ 
      $(GTEST_DIR)/src/gtest-all.cc 
    mv gtest-all.o obj/gtest-all.o 

$(OBJ_DIR)/gtest_main.o : $(GTEST_SRCS_) 
    $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ 
      $(GTEST_DIR)/src/gtest_main.cc 
    mv gtest_main.o obj/gtest_main.o 

$(OBJ_DIR)/gtest.a : $(OBJ_DIR)/gtest-all.o 
    $(AR) $(ARFLAGS) [email protected] $^ 

$(OBJ_DIR)/gtest_main.a : $(OBJ_DIR)/gtest-all.o $(OBJ_DIR)/gtest_main.o 
    $(AR) $(ARFLAGS) [email protected] $^ 

$(OBJ_DIR)/addition.o : $(USER_DIR)/addition.cpp $(USER_DIR)/addition.h $(GTEST_HEADERS) 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< 
    mv addition.o obj/addition.o 

$(OBJ_DIR)/test.o : $(TESTS_DIR)/test.cpp $(USER_DIR)/addition.h $(GTEST_HEADERS) 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TESTS_DIR)/test.cpp 
    mv test.o obj/test.o 

test : $(OBJ_DIR)/addition.o $(OBJ_DIR)/test.o $(OBJ_DIR)/gtest_main.a 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o [email protected] 

的問題是MV test.o OBJ/test.o線其他人喜歡它。我知道有一種方法可以自動爲你做這件事,但在我的生活中,我無法找到/找出它。

這是我自己修改過的谷歌測試附帶的precanned makefile。

回答

0

喜歡的東西

CPPFLAGS += -MMD -MP 

gtest_objs := $(OBJ_DIR)/gtest_all.o $(OBJ_DIR)/gtest_main.o 
my_objs := $(OBJ_DIR)/addition.o $(OBJ_DIR)/test.o 
all_objs := $(gtest_objs) $(objs) 

deps  := $(all_objs:.o=.d) 

$(gtest_objs): CPPFLAGS += -I$(GTEST_DIR) 
$(gtest_objs): $(OBJ_DIR)/gtest_%.o: $(GTEST_DIR)/src/gtest_%.cc 
$(my_objs): $(OBJ_DIR)/%.o: $(USER_DIR)/%.cpp 
$(all_objs): 
    $(COMPILE.cpp) $(OUTPUT_OPTION) $< 

-include $(deps) 

的規則all_objs從內建的規則複製,以及deps - 相關的東西會自動生成依賴你。

+0

對不起,我想我不明白。我用你提供的代碼替換GTEST_HEADERS下面的makefile中的所有內容。我得到一個錯誤:target'obj/gtest-all.o'與目標模式不匹配 –

+0

@JAndrewMcCormick我只注意到文件名不同,將'gtest-all.cc'改爲'gtest_all.cc',I已經相應地更改了makefile。 – user657267