0

我正在尝试制作“google mock”,但我只得到一个库:gmock_main.a

为什么 gmock.a 没有被生产?生成四个 .o 文件。

谢谢,

巴里。

# 用于构建 Google Mock 和 Google Test 的示例 Makefile 和
# 在用户测试中使用它们。这个文件是独立的,所以你不需要
# 需要使用 Google Test 的源代码树中的 Makefile。请调整
# 它以适合您的环境和项目。你可能想把它移到
# 你项目的根目录。
#
# 简介:
#
# make [all] - 制作一切。
# make TARGET - 生成给定的目标。
# make clean - 删除所有由 make 生成的文件。

# 请根据您的需要调整以下变量定义
# 项目,除了 GMOCK_HEADERS 和 GTEST_HEADERS,你可以使用
# 在你自己的目标中,但不应该修改。

# 指向 Google Test 的根目录,相对于该文件所在的位置。
# 如果你移动这个文件,或者你想使用
# 在不同位置的 Google Test 副本。
GTEST_DIR = ../gtest

# 指向 Google Mock 的根目录,相对于该文件所在的位置。
# 如果你移动这个文件,记得调整这个。
GMOCK_DIR = ..

# 在哪里可以找到用户代码。
USER_DIR = ../测试

# 传递给预处理器的标志。
CPPFLAGS += -I$(GTEST_DIR)/包括 -I$(GMOCK_DIR)/包括

# 传递给 C++ 编译器的标志。
CXXFLAGS += -g -Wall -Wextra

# 此 Makefile 生成的所有测试。记得添加新的测试你
# 创建到列表中。
测试 = gmock_test

# 所有 Google 测试标头。通常你不应该改变这个
# 定义。
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
                $(GTEST_DIR)/include/gtest/internal/*.h

# 所有 Google Mock 标头。请注意,所有 Google 测试标头都是
# 也包含在此处,因为它们是由 Google Mock 标头#included 的。
# 通常你不应该改变这个定义。
GMOCK_HEADERS = $(GMOCK_DIR)/include/gmock/*.h \
                $(GMOCK_DIR)/include/gmock/internal/*.h \
                $(GTEST_HEADERS)

# 管理构建目标。

全部:$(测试)

干净的 :
    rm -f $(TESTS) gmock.a gmock_main.a *.o

# 构建 gmock.a 和 gmock_main.a。这些库包含
# 谷歌模拟和谷歌测试。测试应与 gmock.a 中的任何一个链接
# 还是 gmock_main.a,取决于它是否定义了自己的 main()
# 功能。如果您的测试仅使用来自 Google 的功能,那很好
# 测试(而不是 Google Mock)。

# 通常你不应该调整这样的内部变量,用 a 表示
# 尾随_。
GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
GMOCK_SRCS_ = $(GMOCK_DIR)/src/*.cc $(GMOCK_HEADERS)

# 为简单起见,避免依赖于实现细节
# Google Mock 和 Google Test,下面指定的依赖是
# 保守且未优化。这很好,因为 Google Mock 和
# Google Test 编译速度很快,对于普通用户来说他们的源代码很少
# 变化。
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) $@ $^

# 构建一个示例测试。

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 $@
4

1 回答 1

3

我要在这里冒险了。我敢打赌你会给它命令make all。评论

#   make [all]  - makes everything.

具有误导性。事实上,make all只做gmock_test(和那个目标需要的东西,即gmock_main.a和四个目标文件)。如果你想做gmock.a,你有几个选择:

1)make gmock.a

2)添加gmock.aall目标,如下所示:

all : $(TESTS) gmock.a

3)为其他东西写一个规则,比如一个可执行文件,它实际上需要gmock.a

real_thing: gmock.a
    ...
于 2011-03-30T14:27:23.883 回答