2016-05-23 4 views
1

Für das Leben von mir kann ich nicht herausfinden, wie die mv-Anweisungen in der folgenden Make-DateiProjekt Makefile Probleme mit Google-Test

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] 

Das Problem ist die mv test.o obj/test.o Linie zu entfernen und die anderen mögen es. Ich weiß, dass es einen Weg gibt, dies automatisch für dich tun zu lassen, aber für das Leben von mir kann ich es nicht finden.

Dies ist das vorgefertigte Makefile, das mit Google Test geliefert wird, das ich für mich modifiziert habe.

Antwort

0

So etwas wie

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) 

Die Regel für all_objs wird von der eingebauten Regel kopiert und die deps -related Sachen werden Abhängigkeiten automatisch für Sie generieren.

+0

Es tut mir leid, ich denke, ich verstehe nicht. Ich habe alles in meinem Makefile unterhalb von GTEST_HEADERS durch den von Ihnen angegebenen Code ersetzt. Ich erhalte einen Fehler: Ziel 'obj/gtest-all.o 'stimmt nicht mit dem Zielmuster überein –

+0

@JAndrewMcCormick Ich bemerkte nur jetzt die Dateinamen sind unterschiedlich, ändere' gtest-all.cc' zu 'gtest_all.cc', ich habe das Makefile entsprechend geändert. – user657267