Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何构建c++;仅使用.h文件的程序_C++_Makefile - Fatal编程技术网

C++ 如何构建c++;仅使用.h文件的程序

C++ 如何构建c++;仅使用.h文件的程序,c++,makefile,C++,Makefile,在中,有一个包含演示测试和文件的示例文件夹。在make文件夹中,有一个脚本,用于使用sample1.h和sample1.cc文件(以及sample1\u unittest.cc)构建程序 但是,示例文件夹中的第三个示例只有一个.h文件--sample3 inl.h,该文件内联了所有测试代码,即没有.cc文件。基于上面的例子,我试图构建它,就像你在下面看到的那样,但是当我运行make时,它说sample3.o不存在 问题:当所有代码都内联在.h文件中时,如果没有创建.o文件,如何构建程序 sam

在中,有一个包含演示测试和文件的示例文件夹。在make文件夹中,有一个脚本,用于使用
sample1.h
sample1.cc
文件(以及
sample1\u unittest.cc
)构建程序

但是,示例文件夹中的第三个示例只有一个
.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 $@
我应该这样做。如果没有上述更改,代码将在
sample3.o
规则中生成
sample3 inl.o


或者稍后将输入
.o
文件更改为
sample3 inl.o

但有一个
sample3\u unittest.cc
。@immibis是的,有一个sample3\u unittest.cc,但没有sample3.cc(即只有一个sample3 inl.h文件),也许问题在于他们正在演示如何对仅标头的库进行单元测试。好的,它可以工作。它是否也会生成一个“sample3inl.h.gch”文件?@Leahcim预编译头文件?看起来很合理。
 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 $@
sample3.o : $(USER_DIR)/sample3-inl.h $(GTEST_HEADERS)
  $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample3-inl.h -o sample3.o