使用scons确定复杂构建的源文件列表(*.[ch])

Jen*_*ens 6 build-process build scons

假设您有一个C项目的复杂源代码树,许多目录包含大量文件.scons构建支持多个目标(i386,sparc,powerpc)和多个变体(调试,发布).这里有一个sconstruct在根(引用各种sconscripts,做正确的事情所有这些,当参数指定的目标和变异,如调用)scons target=i386 variant=release.

有没有一种简单的方法来确定每个构建将使用哪些源文件(*.c和*.h)(它们都略有不同)?我的理论是,scons需要计算这个文件集,以便知道要编译哪些文件以及何时重新编译.它能提供这些信息吗?

我确实想要做的:

  • 记录一个详细的构建并对其进行后处理(可能不会告诉*.h文件)
  • find . -name '*.[ch]' 还会打印不需要的文件以进行单元测试和其他伪装,并且不是特定于目标的

理想情况下,我想做,scons target=i386 variant=release printfileset并看到正确的*.[ch]文件列表.然后,该列表可以作为doxygen等其他源文件管理工具的输入.

And*_*ker 3

这里有几个问题都挤在一起:

  • 您可以使用 --dry-run 标志阻止 SCons 运行编译器
  • 您可以使用 --debug=tree 或 --tree=all 标志从 SCons 获取依赖关系树,具体取决于您运行的版本
  • 给定一个文件列表(每行一个),您可以使用 grep 过滤出您感兴趣的内容。

当你把所有这些放在一起时,你最终会得到类似的结果:

scons target=i386 variant=release printfileset -n --tree=all | egrep -i '^ .*\.(c|h|cpp|cxx|hpp|inl)$'
Run Code Online (Sandbox Code Playgroud)