我读到了一个叫"Include What You Use"的工具,它可以帮助清理源代码中多余的 includes。我知道有一个编译器LLVM(Clang)版本和GCC版本。
我的问题是:
1.为什么这个工具依赖于编译器,而不是编译器的“跨平台”?为什么这个工具的创建者从一开始就没有让它独立于编译器?这与它的特殊实现或类似的东西有关吗?
1.如果我想使用一个与LLVM兼容的工具版本,并且我想让它与GCC兼容(因为我正在使用GCC),我需要做些什么?
我读到了一个叫"Include What You Use"的工具,它可以帮助清理源代码中多余的 includes。我知道有一个编译器LLVM(Clang)版本和GCC版本。
我的问题是:
1.为什么这个工具依赖于编译器,而不是编译器的“跨平台”?为什么这个工具的创建者从一开始就没有让它独立于编译器?这与它的特殊实现或类似的东西有关吗?
1.如果我想使用一个与LLVM兼容的工具版本,并且我想让它与GCC兼容(因为我正在使用GCC),我需要做些什么?
3条答案
按热度按时间v1l68za41#
1.为什么这个工具依赖于编译器,而不是编译器的“跨平台”?为什么这个工具的创建者从一开始就没有让它独立于编译器?这与它的特殊实现或类似的东西有关吗?
原因很简单。Clang更现代,更新鲜,具有更好的模块化架构。因此,使用Clang模块创建工具要容易得多。
这就是为什么Clang是第一个有地址消毒器和更酷的消毒器的工具。这就是为什么当有人为C创建一个新工具时,它从Clang开始。
如果我想使用一个与LLVM兼容的工具版本,并且我想让它与GCC兼容(因为我正在使用GCC),我需要做些什么?
Clang是因为苹果对GCC不满意而创建的。所以当它被编写时,它应该尽可能与GCC兼容,因为有很多代码是用GCC验证的。
由于Clang现在已经成熟并提供了新的特性,因此与GCC可能会有一些小的差异(例如,在新的C标准的实现中存在不同的bug),但在大多数常见代码中应该没有任何问题。
rkkpypqq2#
工具本身 * 需要 * 编译器的部分!它位于阅读源代码和解析它之间的某个位置。LLVM提供了用于工具的API。工具本身不是独立的,而是Clang/LLVM的插件。因此,它需要Clang/LLVM。
该工具所做的修改与所有C++编译器完全兼容。此外,与Clang/LLVM结合的插件应该能够独立于使用的其他编译器或多或少地解析每个代码库。可能会有一些奇怪的宏被其他工具链支持,LLVM可能会遇到困难。但这应该是一种罕见的情况。
tp5buhyn3#
在大多数情况下,Include-What-You-Use应该能够处理任何有效的C++代码库,无论该代码库是使用GCC还是Clang编写的。我最近有机会在一个非常大的代码库上运行Include-What-You-Use,该代码库通常使用GCC编译,并且运行良好。因此,从这个意义上说,它已经兼容了。
也就是说,它可能不会完美地工作。它提供的一些信息可能是错误的,即使它是一个Clang代码库。所以总是手动验证输出。