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

6
假设你的C项目有一个复杂的源代码树,有很多目录和文件。scons构建支持多个目标(i386、sparc、powerpc)和多个变体(debug、release)。在根目录下有一个'sconstruct'文件(引用了各种'sconscripts'),通过使用指定目标和变体的参数来调用,可以为所有这些内容提供正确的操作,例如'scons target=i386 variant=release'。
有没有简单的方法确定每个构建将使用哪些源文件(*.c和*.h)(它们都略有不同)?我的理论是,Scons需要计算这个文件集以知道要编译哪些文件以及何时重新编译。它能提供这些信息吗?
我不想做的事情:
1. 记录详细的构建并进行后处理(可能无法告诉*.h文件)
2. “find . -name '*.[ch]'”也会打印出单元测试和其他垃圾文件,并且不是特定于目标的。
理想情况下,我希望执行'scons target=i386 variant=release printfileset'并查看适当的*.[ch]文件列表。然后,该列表可以作为进一步源文件修改工具(如doxygen)的输入。
1个回答

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)$'

这是一个有前途的解决方案。这是我对文件集的初步近似解:scons -n --tree=all | sed -ne '/\.[ch]$/s/^[-+ |]*//p' | sort -u - Jens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接