与模式匹配的文件中行的绝对路径

与模式匹配的文件中行的绝对路径

我有 c 程序,我想将该 c 程序中的标题的绝对路径放入单独的文件中。我使用了以下命令

find  "${pwd)" -name "#include" > file.txt.

谁能帮我这个?

答案1

如果你正在寻找直接或间接包含在当前目录中的头文件 - 并假设它们都有.h后缀 no其他文件就是这样命名的——你可以搜索名称以 结尾的文件.h

find "$PWD" -name '*.h' >file.txt

如果您愿意,您可以用"$(pwd)"代替。如果您按照问题所示直接使用 ,那么这将不起作用,因为您不能用 结束开头。但您走在正确的轨道上,因为使用只会给您相对路径而不是绝对路径。"$PWD""${pwd)"{).

name "#include"不起作用的原因是-name指定要匹配的名称或模式文件名。在 C 中包含头文件时,确实使用了指令#include,但这不是名称的一部分。


另一方面,如果您只想查找程序中使用的头文件,或者想要查找包含在程序目录树(我假设是当前目录)之外的头文件,那么您可能需要检查文件的内容。

如果您使用这样的系统,您可能能够从Makefile或之类的文件中获取信息。否则,或者如果这不能满足您的需要,那么您将需要研究编译器提供哪些功能来执行此操作。如果您使用或,那就是和选项。不同之处在于不列出系统标头。对于传递给编译器的每个文件,它显示的格式是:CMakeLists.txtgccclang-M-MM-MMfilename.c

filename.o: filename.c headers...

在哪里headers...是头文件路径的列表,用空格或空格后跟反斜杠再跟换行符分隔,具体取决于路径的长度。

输出以这种方式显示,因为它的主要目的是指定构建程序或库的每个翻译单元的依赖项。发出的语法可以在 makefile 中使用。根据您的描述,这听起来不是您想要的语法。您可以将输出处理成您需要的格式。(例如,如果没有任何标题包含空格字符并且您可以接受重复项,则可以管道输出到类似 的命令grep -oP '\S+\.h(?:\s|$)'


因为我不太清楚您实际上需要列出哪些头文件(您可能需要自己尝试才能找到答案),所以我没有详细介绍这方面的内容。一旦您弄清楚了您到底需要哪些头文件以及应该如何找出它们,剩下的文本处理可能就会变得比较简单了。

gccclang支持一个-H选项,你可以尝试一下,但我猜它会产生比你想要的更多的输出。参见如何判断头文件从哪里被包含?man gcc;和GCC 参考手册, 尤其第3.12节, 了解更多信息。

相关内容