我正在使用一个仅包含头文件的库,希望只包含我实际使用的部分。
如果我包括库中的一个头文件,如何找到库中包含的所有其他头文件?或者更一般地说,如何找到组成C++翻译单元的所有文件?(我在Linux上使用g++。)
编辑:使用gcc的可能方法(答案摘要)
如果我包括库中的一个头文件,如何找到库中包含的所有其他头文件?或者更一般地说,如何找到组成C++翻译单元的所有文件?(我在Linux上使用g++。)
编辑:使用gcc的可能方法(答案摘要)
gcc -H produces output of the form:
... /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
You have to filter out the system headers manually, though.
gcc -E gives you the raw preprocessor output:
# 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__));
You have to parse the linemarkers manually. See: http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html
gcc -M produces a Make file for the given source file. The output looks as follows:
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 \