簡體   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