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

时间:2011-09-02 12:32:56

标签: build build-process 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)的输入。

1 个答案:

答案 0 :(得分:3)

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

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

当你把所有这些放在一起时,你会得到类似的东西:

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