在the repo for GoogleTest中,有一个包含演示测试和文件的示例文件夹。在make文件夹中,有一个脚本用于构建包含sample1.h
和sample1.cc
文件的程序(以及sample1_unittest.cc
)
# Builds a sample test. A test should link with either gtest.a or
# gtest_main.a, depending on whether it defines its own main()
# function.
sample1.o : $(USER_DIR)/sample1.cc $(USER_DIR)/sample1.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1.cc
sample1_unittest.o : $(USER_DIR)/sample1_unittest.cc \
$(USER_DIR)/sample1.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1_unittest.cc
sample1_unittest : sample1.o sample1_unittest.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
但是,示例文件夹中的第三个示例只有一个.h
文件 - sample3-inl.h
,其中包含所有经过测试的代码,即没有.cc文件。基于上面的例子,我尝试构建它,就像你在下面看到的那样但是当我运行make时它表示sample3.o不存在
问题:当所有代码都在.h
文件中内联时,如果没有创建.o
文件,如何构建程序?
sample3.o : $(USER_DIR)/sample3-inl.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample3-inl.h
sample3_unittest.o : $(USER_DIR)/sample3_unittest.cc \
$(USER_DIR)/sample3-inl.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample3_unittest.cc
sample3_unittest : sample3.o sample3_unittest.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
答案 0 :(得分:1)
sample3.o : $(USER_DIR)/sample3-inl.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample3-inl.h -o sample3.o
应该这样做。如果没有上述更改,代码会在sample3-inl.o
规则中生成sample3.o
。
或稍后将输入.o
文件更改为sample3-inl.o
。