繁体   English   中英

如何查找构成C ++中翻译单元的所有文件?

[英]How to find all files that constitute a translation unit in C++?

我正在使用仅标头的库,并且只想包含我实际使用的库的一部分。

如果我包括库的头文件之一,如何找到库所包含的所有其他头文件? 或更笼统地说:我如何找到组成C ++转换单元的所有文件? (我在Linux上使用g ++。)

编辑:gcc的可能方法(答案摘要)

  • gcc -H产生以下形式的输出:

     ... /usr/include/c++/4.6/cmath .... /usr/include/math.h ..... /usr/include/x86_64-linux-gnu/bits/huge_val.h ..... /usr/include/x86_64-linux-gnu/bits/huge_valf.h 

    但是,您必须手动过滤掉系统头。

  • gcc -E给您原始的预处理输出:

     # 390 "/usr/include/features.h" 2 3 4 # 38 "/usr/include/assert.h" 2 3 4 # 68 "/usr/include/assert.h" 3 4 extern "C" { extern void __assert_fail (__const char *__assertion, __const char *__file, unsigned int __line, __const char *__function) throw () __attribute__ ((__noreturn__)); 

    您必须手动解析线标记。 请参阅: http : //gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

  • gcc -M为给定的源文件生成一个Make文件。 输出如下:

     object.o: mylibrary/object.h /usr/include/c++/4.6/map \\ /usr/include/c++/4.6/bits/stl_tree.h \\ /usr/include/c++/4.6/bits/stl_algobase.h \\ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \\ 

我相信您正在寻找gcc -H

g++ -M somefile获取一个makefile,该makefile包含所有文件somefile作为somefile.o的依赖项。

g++ -MM somefile相同,但是没有列出系统头文件(例如/usr/include/usr/local/include )。

您需要什么呢? 如果用于依赖性跟踪,则上面的内容就足够了。 另一方面,如果您想做一些疯狂的事情,例如“我包含此标头,而该标头包含此标头,那么我就无需再次包含它”。 不,认真 别。

您可以使用GCC的-E标志获取预处理的源,然后将其grep表示为#include 我不知道源文件可以通过其他任何方式找到进入翻译单元的方式,因此这应该可以完成工作。

对于g ++(我认为是大多数Unix编译器),可以使用-M 对于其他编译器,您将需要-E/E ,将输出捕获到文件中,然后使用您喜欢的脚本语言对文件进行后处理。 (我在我的makefile中执行此操作,以建立依赖关系。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM