【问题标题】:Treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated在 C++ 模式下将“c-header”输入视为“c++-header”,不推荐使用此行为
【发布时间】:2015-10-07 19:27:02
【问题描述】:

这类似于Warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated。但是,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 构建依赖项同时避免 Clang 警告?

【问题讨论】:

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

标签: c++ makefile dependencies gnu-make


【解决方案1】:

c++ 编译器的-MM 选项将列出输入文件的所有依赖项。假设您实际编译 .cpp 文件(并且不执行 $(CXX) -c xyz.h 或类似的操作),则仅 .cpp 文件需要依赖项。因此将其更改为:

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

应该在 GNUmakefile.deps 中给出你需要的所有依赖项。

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多