我有一个非常大的代码,其中很多是遗留代码。 我想知道所有这些文件中哪一个参与编译。 代码是用GNU编译器编写的,主要用C / C ++编写,但也有一些在其他程序中编写。 任何建议将受到高度赞赏。
谢谢,
摩西。
我在linux下使用各种脚本/ makefile进行编译。我想以某种方式用一个工具“包装”这个构建,该工具将提供构建中使用的所有源文件的输出,最好是具有绝对路径名。
你说什么?
答案 0 :(得分:10)
如果要显示包含的标题,那么是否支持它以及如何执行它取决于编译器。
如,
C:\test> (g++ --help --verbose 2>&1) | find "header"
-print-sysroot-headers-suffix Display the sysroot suffix used to find headers
--sysroot=<directory> Use <directory> as the root directory for headers
-H Print the name of header files as they are used
-MG Treat missing header files as generated files
-MM Like -M but ignore system header files
-MMD Like -MD but ignore system header files
-MP Generate phony targets for all headers
-Wsystem-headers Do not suppress warnings from system headers
-print-objc-runtime-info Generate C header of platform-specific features
-ftree-ch Enable loop header copying on trees
C:\test> (cl /? 2>&1) | find "include"
/FI<file> name forced include file /U<name> remove predefined macro
/u remove all predefined macros /I<dir> add to include search path
/nologo suppress copyright message /showIncludes show include file names
C:\test> _
在上面你可以看到g ++和Visual C ++的相关选项。
干杯&amp;第h。,
- Alf
答案 1 :(得分:2)
对于给定的编译单元,例如foo.cpp,将标志-E -g3
添加到g ++的调用中。
这为您提供了预处理代码。在那里,您可以查看包含哪些内容。
答案 2 :(得分:1)
有两种选择。
答案 3 :(得分:0)
make
,scons
等)。Makefile
,SConstruct
等。答案 4 :(得分:0)
这是一种使用make
查找所有包含文件的技术。
它是非侵入性的,因此您无需对文件进行任何更改,甚至无需进行实际编译。 Make将为您完成所有工作。
make -d
将运行make并发出很多行来描述make进程的内部处理。最重要的是对依赖性的考虑。
解析输出很容易找到依赖关系以及所有其他文件。
这是Linux命令行,可获取包含包含文件的目录的排序列表:
make -d | awk '/Prerequisite/ { if(match($2,".(.*)(/)(.*\\.h)",m)) { c[m[1]]++ ; } } END {for(d in c) print "\"" d "\",";} ' | sort
在这种情况下,引用目录并在末尾添加逗号,因此输出准备好包含在Visual Studio代码(vscode)配置文件c_cpp_properties.json
简单的变体可以生成包含依赖项的完整列表,如下所示:
make -d | awk '/Prerequisite/ { if(match($2,".(.*\\.h)",m)) { c[m[1]]++ ; } } END {for(d in c) print d ;} ' | sort
这也应与目标(例如make All
)一起使用