C++ 治疗';c-收割台';输入为';c++-标题';在C++;模式下,此行为已被弃用

C++ 治疗';c-收割台';输入为';c++-标题';在C++;模式下,此行为已被弃用,c++,makefile,dependencies,gnu-make,C++,Makefile,Dependencies,Gnu Make,这类似于。然而,OP试图编译头文件。在我的例子中,我试图生成依赖项: $ git diff diff --git a/GNUmakefile b/GNUmakefile index 791ef05..ce48a59 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -175,6 +176,11 @@ LIBIMPORTOBJS = $(LIBOBJS:.o=.import.o) TESTIMPORTOBJS = $(TESTOBJS:.o=.impor

这类似于。然而,OP试图编译头文件。在我的例子中,我试图生成依赖项:

$ git diff
diff --git a/GNUmakefile b/GNUmakefile
index 791ef05..ce48a59 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -175,6 +176,11 @@ LIBIMPORTOBJS = $(LIBOBJS:.o=.import.o)
 TESTIMPORTOBJS = $(TESTOBJS:.o=.import.o)
 DLLTESTOBJS = dlltest.dllonly.o

+-include GNUmakefile.deps
+
+GNUmakefile.deps:
+       $(CXX) $(CXXFLAGS) -MM *.h *.cpp > GNUmakefile.deps
+

< >我如何使用<代码> CXX/COD>建立依赖关系,同时避免CLAN警告?< /P> < P> >代码> -m> <代码>选项,C++编译器将给出输入文件的所有依赖项列表。假设您实际编译.cpp文件(而不编译
$(CXX)-c xyz.h
或类似的文件),则依赖项仅适用于.cpp文件。将此更改为:

 $(CXX) $(CXXFLAGS) -MM *.cpp > GNUmakefile.deps

应该在GNUmakefile.deps中提供您需要的所有依赖项。

即使在执行
-MM
时,您也可能不想对.h文件执行此操作-如果它们不包含在.cpp文件中,它们(很可能)不需要在依赖项中…@Mats-谢谢。那么内联函数和静态实现呢?我会得到预期的结果吗?-MM list根据文件中包含的内容提供依赖项列表-因此,假设您以后不尝试编译.h文件,并且只关心从.cpp文件生成对象文件,那么在deps生成中使用*.cpp就可以了。为了使内联函数在头文件中有用,它们需要在.cpp文件中编译,对吗?那么,
如何使
(或您使用的任何工具)知道有哪些依赖关系?这正是
-MM
的用途。列出特定源文件包含的包含文件。某处需要知道/理解/跟踪特定源文件包含的所有头文件。。。没有捷径,有些东西,某个地方需要有那个列表……谢谢。这就引出了一个问题,是否有一些工具来验证源文件中包含的项目是否完整?(很抱歉成为吸血鬼帮手,我不能这样问这个问题)。