“包括你用的东西”

时间:2017-08-06 04:29:32

标签: c++ gcc debian clang

我读到了一个名为“包括你使用的东西”的工具,它可以帮助我清理多余的包含 从我的源代码。我知道有一个版本的编译器LLVM(clang)和gcc的版本。 我的问题是

  1. 为什么这个工具依赖于编译器而不是编译器的“跨平台”。为什么从一开始 该工具的创建者没有使它与编译器无关?它与特殊实施有关吗? 有或类似的东西?
  2. 如果我想使用与llvm兼容的工具版本,我想让它与gcc兼容(因为 我正在使用gcc)。我必须为此做些什么?

3 个答案:

答案 0 :(得分:1)

在大多数情况下,Include-What-You-Use应该能够处理任何有效的C ++代码库,无论该代码库是用gcc还是clang编写的。我最近有机会在一个非常大的代码库上运行Include-What-You-Use,它通常用gcc编译,并且工作正常。所以在这个意义上它已经兼容了。

那说,它可能不会很完美。它提供的一些信息很可能是错误的,即使它是一个铿锵的代码库。因此,请始终手动验证输出。

答案 1 :(得分:1)

  
      
  1. 为什么该工具依赖于编译器,而不是针对编译器的“跨平台”。为什么从一开始该工具的创建者就没有做出   它与编译器无关吗?与特殊实施有关吗   它具有或类似的东西?
  2.   

原因很简单,c具有更现代的新鲜感和更好的模块化体系结构。因此,使用clang模块创建工具要容易得多。

这就是为什么c是第一个具有地址消毒剂并具有更多凉爽消毒剂的原因的。这就是为什么有人用clang为C ++ star创建新工具的原因。

  
      
  1. 如果我想使用与llvm兼容的工具版本,并且想使其与gcc兼容(因为我正在使用gcc)。什么   我必须为此做吗?
  2.   

clang是由于Apple对gcc不满意而创建的。因此,在编写该代码时,它应该尽可能与gcc兼容,因为有很多代码已通过gcc验证。

由于clang现在已经成熟并且提供了自己的新功能,因此gcc可能会有细微的差异(例如,新C ++标准的实现中存在不同的错误),但是在大多数常见代码中应该没有问题。

IWYU应该可以在两个编译器上正常工作。我的同事在带有3个编译器(clang,gcc和VS)的大型项目构建中使用了它,它的工作就像一个魅力。

答案 2 :(得分:0)

该工具本身需要编译器的各个部分!它位于读取源代码和解析源代码之间的某个位置。 LLVM提供了用于该工具的API。该工具本身不是独立的,而是clang / llvm的插件。因此,它需要clang / llvm。

该工具将进行的修改与每个c ++编译器完全兼容。与clang / llvm结合使用的插件也应该能够或多或少地解析每个代码库,而与使用的其他编译器无关。其他工具链可能支持某些奇怪的宏,llvm可能会遇到这些宏。但这绝对是一种罕见的情况。