From 4be89136055184b5c2f544592225228a9ad3019e Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Tue, 13 Feb 2018 17:49:39 -0500 Subject: [PATCH 1/8] Add googletest as a submodule. Update the Makefile to load specific submodules. --- .gitmodules | 3 +++ lib/googletest | 1 + 2 files changed, 4 insertions(+) create mode 160000 lib/googletest diff --git a/.gitmodules b/.gitmodules index ab43f5a5..e53575f1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "lib/yaml-cpp"] path = lib/yaml-cpp url = https://github.com/jbeder/yaml-cpp +[submodule "lib/googletest"] + path = lib/googletest + url = https://github.com/google/googletest diff --git a/lib/googletest b/lib/googletest new file mode 160000 index 00000000..42140509 --- /dev/null +++ b/lib/googletest @@ -0,0 +1 @@ +Subproject commit 42140509b6fc2337f8cffe913f6ce1dbf489513b From 1a2201fd6dfab4b474c4944839ee1a55d2559540 Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Wed, 14 Feb 2018 18:18:05 -0500 Subject: [PATCH 2/8] Add a unitttest for format.cc Also add a Makefile that is easy to extend as we add tests for the remaining code. Only the SRCS needs to be extended in most cases. --- test/Makefile | 61 +++++++++++++++++++++++++++++++++++++++++ test/format_unittest.cc | 42 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 test/Makefile create mode 100644 test/format_unittest.cc diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 00000000..1fb574f3 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,61 @@ +LIBDIR=../lib +GTEST_MODULE=$(LIBDIR)/googletest +GTEST_DIR=$(LIBDIR)/googletest/googletest +GTEST_SOURCEDIR=$(GTEST_DIR)/src +GTEST_HEADERS=$(GTEST_DIR)/include/gtest/*.h \ + $(GTEST_DIR)/include/gtest/internal/*.h +GTEST_SRCS_=$(GTEST_SOURCEDIR)/*.cc $(GTEST_SOURCEDIR)/*.h $(GTEST_HEADERS) + +CPP_NETLIB_DIR=$(LIBDIR)/cpp-netlib +YAML_CPP_DIR=$(LIBDIR)/yaml-cpp + +CPPFLAGS+=-isystem $(GTEST_DIR)/include +CXXFLAGS=-std=c++11 -g -pthread + +# Where to find user code. +SRC_DIR=../src +SRCS=\ + $(SRC_DIR)/format.cc +OBJS=$(subst src/,test/,$(subst .cc,.o,$(SRCS))) + +TEST_DIR=. +TESTS=$(wildcard $(TEST_DIR)/*.cc) +TEST_OBJS=$(TESTS:%.cc=%.o) + +GTEST_LIBS=gtest_main.a + +all: build-googletest unittest + +clean: + rm -f unittest *.a *.o + +purge: clean + git submodule deinit -f --all + +init-submodules: + git submodule init && \ + git submodule update + +$(GTEST_SRCS_): init-submodules +$(GTEST_DIR)/Makefile: $(GTEST_SRCS_) + $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ + $(GTEST_SOURCEDIR)/gtest-all.cc + $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ + $(GTEST_SOURCEDIR)/gtest_main.cc + +$(GTEST_LIBS): build-googletest + +build-googletest: $(GTEST_DIR)/Makefile + $(AR) $(ARFLAGS) gtest_main.a gtest-all.o gtest_main.o + +build-source: $(SRCS) $(GTEST_HEADERS) + $(CXX) $(CPPFLAGS) -I$(CPP_NETLIB_DIR) \ + -I$(YAML_CPP_DIR)/include $(CXXFLAGS) -c $(SRCS) + +build-test: $(TESTS) $(GTEST_HEADERS) + $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(TESTS) + +$(OBJS): build-source +$(TEST_OBJS): build-test +unittest: $(GTEST_LIBS) $(OBJS) $(TEST_OBJS) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ diff --git a/test/format_unittest.cc b/test/format_unittest.cc new file mode 100644 index 00000000..2c66fa91 --- /dev/null +++ b/test/format_unittest.cc @@ -0,0 +1,42 @@ +#include "../src/format.h" +#include "gtest/gtest.h" + +namespace { + +TEST(SubstituteTest, ValidFormat) { + const std::string endpoint_format = + "https://stackdriver.googleapis.com/v1beta2/projects/{{project_id}}"; + EXPECT_EQ( + "https://stackdriver.googleapis.com/v1beta2/projects/my-project", + format::Substitute(endpoint_format, {{"project_id", "my-project"}}) + ); +} + +TEST(SubstituteTest, ValidFormatMultipleSubstitution) { + const std::string endpoint_format = + "https://stackdriver.googleapis.com/{{version}}/projects/{{project_id}}"; + EXPECT_EQ( + "https://stackdriver.googleapis.com/v1/projects/my-project", + format::Substitute(endpoint_format, { + {"project_id", "my-project"}, {"version", "v1"}}) + ); +} + +TEST(SubstituteTest, UnterminatedPlaceholder) { + const std::string endpoint_format = + "https://stackdriver.googleapis.com/v1beta1/projects/{{project_id"; + EXPECT_THROW( + format::Substitute(endpoint_format, {{"project_id", "my-project"}}), + format::Exception + ); +} + +TEST(SubstituteTest, UnknownParameter) { + const std::string endpoint_format = + "https://stackdriver.googleapis.com/v1beta1/projects/{{project_id}}"; + EXPECT_THROW( + format::Substitute(endpoint_format, {{"project", "my-project"}}), + format::Exception + ); +} +} // namespace From 1cdba2b1aea09f112086940de4c4e2a9a8dadcdb Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Thu, 15 Feb 2018 11:48:13 -0500 Subject: [PATCH 3/8] Fix the indentation and add .PHONY in test/Makefile --- test/Makefile | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/Makefile b/test/Makefile index 1fb574f3..e599dee1 100644 --- a/test/Makefile +++ b/test/Makefile @@ -3,7 +3,7 @@ GTEST_MODULE=$(LIBDIR)/googletest GTEST_DIR=$(LIBDIR)/googletest/googletest GTEST_SOURCEDIR=$(GTEST_DIR)/src GTEST_HEADERS=$(GTEST_DIR)/include/gtest/*.h \ - $(GTEST_DIR)/include/gtest/internal/*.h + $(GTEST_DIR)/include/gtest/internal/*.h GTEST_SRCS_=$(GTEST_SOURCEDIR)/*.cc $(GTEST_SOURCEDIR)/*.h $(GTEST_HEADERS) CPP_NETLIB_DIR=$(LIBDIR)/cpp-netlib @@ -34,14 +34,14 @@ purge: clean init-submodules: git submodule init && \ - git submodule update + git submodule update $(GTEST_SRCS_): init-submodules $(GTEST_DIR)/Makefile: $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ - $(GTEST_SOURCEDIR)/gtest-all.cc + $(GTEST_SOURCEDIR)/gtest-all.cc $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ - $(GTEST_SOURCEDIR)/gtest_main.cc + $(GTEST_SOURCEDIR)/gtest_main.cc $(GTEST_LIBS): build-googletest @@ -50,7 +50,7 @@ build-googletest: $(GTEST_DIR)/Makefile build-source: $(SRCS) $(GTEST_HEADERS) $(CXX) $(CPPFLAGS) -I$(CPP_NETLIB_DIR) \ - -I$(YAML_CPP_DIR)/include $(CXXFLAGS) -c $(SRCS) + -I$(YAML_CPP_DIR)/include $(CXXFLAGS) -c $(SRCS) build-test: $(TESTS) $(GTEST_HEADERS) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(TESTS) @@ -59,3 +59,6 @@ $(OBJS): build-source $(TEST_OBJS): build-test unittest: $(GTEST_LIBS) $(OBJS) $(TEST_OBJS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ + +.PHONY: all clean purge init-submodules build-googletest build-source \ + build-test unittest From bbc20ffc38f7d50f1f4ae5eb59c21b99b81d62c3 Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Thu, 1 Mar 2018 16:46:05 -0500 Subject: [PATCH 4/8] Address comments --- test/Makefile | 10 ++++------ test/format_unittest.cc | 30 +++++++++++++----------------- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/test/Makefile b/test/Makefile index e599dee1..bec06b04 100644 --- a/test/Makefile +++ b/test/Makefile @@ -12,7 +12,7 @@ YAML_CPP_DIR=$(LIBDIR)/yaml-cpp CPPFLAGS+=-isystem $(GTEST_DIR)/include CXXFLAGS=-std=c++11 -g -pthread -# Where to find user code. +# Where to find code under test. SRC_DIR=../src SRCS=\ $(SRC_DIR)/format.cc @@ -30,11 +30,10 @@ clean: rm -f unittest *.a *.o purge: clean - git submodule deinit -f --all + git submodule deinit -f $(GTEST_MODULE) init-submodules: - git submodule init && \ - git submodule update + git submodule update --init $(GTEST_MODULE) $(GTEST_SRCS_): init-submodules $(GTEST_DIR)/Makefile: $(GTEST_SRCS_) @@ -60,5 +59,4 @@ $(TEST_OBJS): build-test unittest: $(GTEST_LIBS) $(OBJS) $(TEST_OBJS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ -.PHONY: all clean purge init-submodules build-googletest build-source \ - build-test unittest +.PHONY: all clean purge diff --git a/test/format_unittest.cc b/test/format_unittest.cc index 2c66fa91..11fc1152 100644 --- a/test/format_unittest.cc +++ b/test/format_unittest.cc @@ -3,39 +3,35 @@ namespace { -TEST(SubstituteTest, ValidFormat) { - const std::string endpoint_format = - "https://stackdriver.googleapis.com/v1beta2/projects/{{project_id}}"; +TEST(SubstituteTest, SingleSubstitution) { + const std::string format_str("prefix|{{subst}}|postfix"); EXPECT_EQ( - "https://stackdriver.googleapis.com/v1beta2/projects/my-project", - format::Substitute(endpoint_format, {{"project_id", "my-project"}}) + "prefix|value|postfix", + format::Substitute(format_str, {{"subst", "value"}}) ); } -TEST(SubstituteTest, ValidFormatMultipleSubstitution) { - const std::string endpoint_format = - "https://stackdriver.googleapis.com/{{version}}/projects/{{project_id}}"; +TEST(SubstituteTest, MultipleSubstitutions) { + const std::string format_str("prefix|{{subst}}|{{another_subst}}|postfix"); EXPECT_EQ( - "https://stackdriver.googleapis.com/v1/projects/my-project", - format::Substitute(endpoint_format, { - {"project_id", "my-project"}, {"version", "v1"}}) + "prefix|value|value2|postfix", + format::Substitute( + format_str, {{"subst", "value"}, {"another_subst", "value2"}}) ); } TEST(SubstituteTest, UnterminatedPlaceholder) { - const std::string endpoint_format = - "https://stackdriver.googleapis.com/v1beta1/projects/{{project_id"; + const std::string format_str("prefix|{{subst|postfix"); EXPECT_THROW( - format::Substitute(endpoint_format, {{"project_id", "my-project"}}), + format::Substitute(format_str, {{"subst", "value"}}), format::Exception ); } TEST(SubstituteTest, UnknownParameter) { - const std::string endpoint_format = - "https://stackdriver.googleapis.com/v1beta1/projects/{{project_id}}"; + const std::string format_str("prefix|{{subst}}|postfix"); EXPECT_THROW( - format::Substitute(endpoint_format, {{"project", "my-project"}}), + format::Substitute(format_str, {{"another_subst", "value"}}), format::Exception ); } From 626e1d7929dfd095617d49f78014f2111953abf5 Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Thu, 1 Mar 2018 18:45:42 -0500 Subject: [PATCH 5/8] Address comments --- test/Makefile | 60 ++++++++++++++++++++++------------------- test/format_unittest.cc | 16 +++++------ 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/test/Makefile b/test/Makefile index bec06b04..08e44115 100644 --- a/test/Makefile +++ b/test/Makefile @@ -6,6 +6,7 @@ GTEST_HEADERS=$(GTEST_DIR)/include/gtest/*.h \ $(GTEST_DIR)/include/gtest/internal/*.h GTEST_SRCS_=$(GTEST_SOURCEDIR)/*.cc $(GTEST_SOURCEDIR)/*.h $(GTEST_HEADERS) +# TODO: Factor out the common variables. CPP_NETLIB_DIR=$(LIBDIR)/cpp-netlib YAML_CPP_DIR=$(LIBDIR)/yaml-cpp @@ -14,49 +15,54 @@ CXXFLAGS=-std=c++11 -g -pthread # Where to find code under test. SRC_DIR=../src -SRCS=\ - $(SRC_DIR)/format.cc -OBJS=$(subst src/,test/,$(subst .cc,.o,$(SRCS))) TEST_DIR=. -TESTS=$(wildcard $(TEST_DIR)/*.cc) -TEST_OBJS=$(TESTS:%.cc=%.o) +TEST_SOURCES=$(wildcard $(TEST_DIR)/*_unittest.cc) +TEST_OBJS=$(TEST_SOURCES:%.cc=%.o) +TESTS=\ + format_unittest -GTEST_LIBS=gtest_main.a +GTEST_LIB=gtest_lib.a -all: build-googletest unittest +all: $(TESTS) + +# TODO: Running the test prints "Running main() from gtest_main.cc". +# Figure out how to fix this. +test: $(TESTS) + @for t in $(TESTS); do \ + echo "Running $$t"; \ + ./$$t; \ + done clean: - rm -f unittest *.a *.o + $(RM) $(TESTS) $(GTEST_LIB) $(TEST_OBJS) purge: clean + $(RM) init-submodules git submodule deinit -f $(GTEST_MODULE) init-submodules: git submodule update --init $(GTEST_MODULE) + touch init-submodules -$(GTEST_SRCS_): init-submodules -$(GTEST_DIR)/Makefile: $(GTEST_SRCS_) - $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ - $(GTEST_SOURCEDIR)/gtest-all.cc - $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ - $(GTEST_SOURCEDIR)/gtest_main.cc -$(GTEST_LIBS): build-googletest +$(SRC_DIR)/%.o: $(SRC_DIR)/%.cc + cd $(SRC_DIR) && $(MAKE) $(subst $@,$(SRC_DIR)/,) -build-googletest: $(GTEST_DIR)/Makefile - $(AR) $(ARFLAGS) gtest_main.a gtest-all.o gtest_main.o +$(GTEST_SOURCEDIR)/gtest-all.cc $(GTEST_SOURCEDIR)/gtest_main.cc: init-submodules -build-source: $(SRCS) $(GTEST_HEADERS) - $(CXX) $(CPPFLAGS) -I$(CPP_NETLIB_DIR) \ - -I$(YAML_CPP_DIR)/include $(CXXFLAGS) -c $(SRCS) +gtest-all.o: $(GTEST_SOURCEDIR)/gtest-all.cc + $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c -o $@ \ + $(GTEST_SOURCEDIR)/gtest-all.cc + +gtest_main.o: $(GTEST_SOURCEDIR)/gtest_main.cc + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ \ + $(GTEST_SOURCEDIR)/gtest_main.cc -build-test: $(TESTS) $(GTEST_HEADERS) - $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(TESTS) +$(GTEST_LIB): gtest-all.o gtest_main.o + $(AR) $(ARFLAGS) $@ $^ -$(OBJS): build-source -$(TEST_OBJS): build-test -unittest: $(GTEST_LIBS) $(OBJS) $(TEST_OBJS) - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ +format_unittest: $(GTEST_LIB) format_unittest.o $(SRC_DIR)/format.o + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -lpthread -o $@ -.PHONY: all clean purge +.PHONY: all test clean purge diff --git a/test/format_unittest.cc b/test/format_unittest.cc index 11fc1152..d2657422 100644 --- a/test/format_unittest.cc +++ b/test/format_unittest.cc @@ -4,24 +4,24 @@ namespace { TEST(SubstituteTest, SingleSubstitution) { - const std::string format_str("prefix|{{subst}}|postfix"); + const std::string format_str("prefix|{{subst}}|suffix"); EXPECT_EQ( - "prefix|value|postfix", + "prefix|value|suffix", format::Substitute(format_str, {{"subst", "value"}}) ); } TEST(SubstituteTest, MultipleSubstitutions) { - const std::string format_str("prefix|{{subst}}|{{another_subst}}|postfix"); + const std::string format_str("prefix|{{first}}|middle|{{second}}|suffix"); EXPECT_EQ( - "prefix|value|value2|postfix", + "prefix|one|middle|two|suffix", format::Substitute( - format_str, {{"subst", "value"}, {"another_subst", "value2"}}) + format_str, {{"first", "one"}, {"second", "two"}}) ); } TEST(SubstituteTest, UnterminatedPlaceholder) { - const std::string format_str("prefix|{{subst|postfix"); + const std::string format_str("prefix|{{subst|suffix"); EXPECT_THROW( format::Substitute(format_str, {{"subst", "value"}}), format::Exception @@ -29,9 +29,9 @@ TEST(SubstituteTest, UnterminatedPlaceholder) { } TEST(SubstituteTest, UnknownParameter) { - const std::string format_str("prefix|{{subst}}|postfix"); + const std::string format_str("prefix|{{subst}}|suffix"); EXPECT_THROW( - format::Substitute(format_str, {{"another_subst", "value"}}), + format::Substitute(format_str, {{"unknown", "value"}}), format::Exception ); } From 10c0a4a5d8640fa1faa048d25c2a07a158df0a31 Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Fri, 2 Mar 2018 16:06:59 -0500 Subject: [PATCH 6/8] Address comments --- test/Makefile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/Makefile b/test/Makefile index 08e44115..41c062c1 100644 --- a/test/Makefile +++ b/test/Makefile @@ -47,17 +47,15 @@ init-submodules: $(SRC_DIR)/%.o: $(SRC_DIR)/%.cc - cd $(SRC_DIR) && $(MAKE) $(subst $@,$(SRC_DIR)/,) + cd $(SRC_DIR) && $(MAKE) $(@:$(SRC_DIR)/%=%) $(GTEST_SOURCEDIR)/gtest-all.cc $(GTEST_SOURCEDIR)/gtest_main.cc: init-submodules gtest-all.o: $(GTEST_SOURCEDIR)/gtest-all.cc - $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c -o $@ \ - $(GTEST_SOURCEDIR)/gtest-all.cc + $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c -o $@ $^ gtest_main.o: $(GTEST_SOURCEDIR)/gtest_main.cc - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ \ - $(GTEST_SOURCEDIR)/gtest_main.cc + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $^ $(GTEST_LIB): gtest-all.o gtest_main.o $(AR) $(ARFLAGS) $@ $^ From d8d0def4b0762fd835f95b9e263625985b910444 Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Fri, 2 Mar 2018 16:55:50 -0500 Subject: [PATCH 7/8] Address comments --- test/Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/Makefile b/test/Makefile index 41c062c1..e4c65972 100644 --- a/test/Makefile +++ b/test/Makefile @@ -12,13 +12,15 @@ YAML_CPP_DIR=$(LIBDIR)/yaml-cpp CPPFLAGS+=-isystem $(GTEST_DIR)/include CXXFLAGS=-std=c++11 -g -pthread +LDFLAGS=$(CPPFLAGS) +LDLIBS=-lpthread # Where to find code under test. SRC_DIR=../src TEST_DIR=. TEST_SOURCES=$(wildcard $(TEST_DIR)/*_unittest.cc) -TEST_OBJS=$(TEST_SOURCES:%.cc=%.o) +TEST_OBJS=$(TEST_SOURCES:$(TEST_DIR)/%.cc=%.o) TESTS=\ format_unittest @@ -52,7 +54,7 @@ $(SRC_DIR)/%.o: $(SRC_DIR)/%.cc $(GTEST_SOURCEDIR)/gtest-all.cc $(GTEST_SOURCEDIR)/gtest_main.cc: init-submodules gtest-all.o: $(GTEST_SOURCEDIR)/gtest-all.cc - $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c -o $@ $^ + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -I$(GTEST_DIR) -o $@ $^ gtest_main.o: $(GTEST_SOURCEDIR)/gtest_main.cc $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $^ @@ -61,6 +63,6 @@ $(GTEST_LIB): gtest-all.o gtest_main.o $(AR) $(ARFLAGS) $@ $^ format_unittest: $(GTEST_LIB) format_unittest.o $(SRC_DIR)/format.o - $(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -lpthread -o $@ + $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@ .PHONY: all test clean purge From ae23d77b38581239c0de1e3f6892adda4cbb0e6a Mon Sep 17 00:00:00 2001 From: Supriya Garg Date: Fri, 2 Mar 2018 17:10:27 -0500 Subject: [PATCH 8/8] reorder flags and use implicit rules in Makefile --- test/Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/Makefile b/test/Makefile index e4c65972..efb58a36 100644 --- a/test/Makefile +++ b/test/Makefile @@ -12,7 +12,6 @@ YAML_CPP_DIR=$(LIBDIR)/yaml-cpp CPPFLAGS+=-isystem $(GTEST_DIR)/include CXXFLAGS=-std=c++11 -g -pthread -LDFLAGS=$(CPPFLAGS) LDLIBS=-lpthread # Where to find code under test. @@ -54,7 +53,7 @@ $(SRC_DIR)/%.o: $(SRC_DIR)/%.cc $(GTEST_SOURCEDIR)/gtest-all.cc $(GTEST_SOURCEDIR)/gtest_main.cc: init-submodules gtest-all.o: $(GTEST_SOURCEDIR)/gtest-all.cc - $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -I$(GTEST_DIR) -o $@ $^ + $(CXX) -c $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -o $@ $^ gtest_main.o: $(GTEST_SOURCEDIR)/gtest_main.cc $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $^