如何使用.h文件构建c ++程序

时间:2016-03-10 02:53:26

标签: c++ makefile

the repo for GoogleTest中,有一个包含演示测试和文件的示例文件夹。在make文件夹中,有一个脚本用于构建包含sample1.hsample1.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 $@

1 个答案:

答案 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