I'm trying to make "google mock" but I'm only getting one library: gmock_main.a
Why is gmock.a not being produced? The four .o files are produced.
Thanks,
Barry.
# A sample Makefile for building both Google Mock and Google Test and # using them in user tests. This file is self-contained, so you don't # need to use the Makefile in Google Test's source tree. Please tweak # it to suit your environment and project. You may want to move it to # your project's root directory. # # SYNOPSIS: # # make [all] - makes everything. # make TARGET - makes the given target. # make clean - removes all files generated by make. #开发者_运维百科 Please tweak the following variable definitions as needed by your # project, except GMOCK_HEADERS and GTEST_HEADERS, which you can use # in your own targets but shouldn't modify. # Points to the root of Google Test, relative to where this file is. # Remember to tweak this if you move this file, or if you want to use # a copy of Google Test at a different location. GTEST_DIR = ../gtest # Points to the root of Google Mock, relative to where this file is. # Remember to tweak this if you move this file. GMOCK_DIR = .. # Where to find user code. USER_DIR = ../test # Flags passed to the preprocessor. CPPFLAGS += -I$(GTEST_DIR)/include -I$(GMOCK_DIR)/include # Flags passed to the C++ compiler. CXXFLAGS += -g -Wall -Wextra # All tests produced by this Makefile. Remember to add new tests you # created to the list. TESTS = gmock_test # All Google Test headers. Usually you shouldn't change this # definition. GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ $(GTEST_DIR)/include/gtest/internal/*.h # All Google Mock headers. Note that all Google Test headers are # included here too, as they are #included by Google Mock headers. # Usually you shouldn't change this definition. GMOCK_HEADERS = $(GMOCK_DIR)/include/gmock/*.h \ $(GMOCK_DIR)/include/gmock/internal/*.h \ $(GTEST_HEADERS) # House-keeping build targets. all : $(TESTS) clean : rm -f $(TESTS) gmock.a gmock_main.a *.o # Builds gmock.a and gmock_main.a. These libraries contain both # Google Mock and Google Test. A test should link with either gmock.a # or gmock_main.a, depending on whether it defines its own main() # function. It's fine if your test only uses features from Google # Test (and not Google Mock). # Usually you shouldn't tweak such internal variables, indicated by a # trailing _. GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) GMOCK_SRCS_ = $(GMOCK_DIR)/src/*.cc $(GMOCK_HEADERS) # For simplicity and to avoid depending on implementation details of # Google Mock and Google Test, the dependencies specified below are # conservative and not optimized. This is fine as Google Mock and # Google Test compile fast and for ordinary users their source rarely # changes. gtest-all.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) -I$(GMOCK_DIR) $(CXXFLAGS) \ -c $(GTEST_DIR)/src/gtest-all.cc gmock-all.o : $(GMOCK_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) -I$(GMOCK_DIR) $(CXXFLAGS) \ -c $(GMOCK_DIR)/src/gmock-all.cc gmock_main.o : $(GMOCK_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) -I$(GMOCK_DIR) $(CXXFLAGS) \ -c $(GMOCK_DIR)/src/gmock_main.cc gmock.a : gmock-all.o gtest-all.o $(AR) $(ARFLAGS) $@ $^ gmock_main.a : gmock-all.o gtest-all.o gmock_main.o $(AR) $(ARFLAGS) $@ $^ # Builds a sample test. gmock_test.o : $(USER_DIR)/gmock_test.cc $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/gmock_test.cc gmock_test : gmock_test.o gmock_main.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
I'm going to go out on a limb here. I'll bet you're giving it the command make all
. The comment
# make [all] - makes everything.
is misleading. In fact, make all
makes only gmock_test
(and the things which that target needs, namely gmock_main.a
and the four object files). If you want to make gmock.a
, you have a couple of choices:
1) make gmock.a
2) Add gmock.a
to the all
target, like this:
all : $(TESTS) gmock.a
3) Write a rule for some other thing, like an executable, which actually needs gmock.a
:
real_thing: gmock.a
...
精彩评论