如何编写查找隐式依赖项的SCons构建器

时间:2014-04-14 05:39:00

标签: builder scons implicit

首先:是否可以编写自己的方式来查找其他依赖项(例如#included headers)并以某种方式将它们提交回您自己的自定义构建器?

第二:如果没有,是否可以在自定义构建器中使用SCons的硬编码#include依赖检测系统?

第三:如果没有,我可以用自己的替换说Object()构建器[?]的编译器(比如带有一些自定义全局选项的自定义llvm)并让它也采用每个对象选项(比如多个per-object -iquote)同时还要将#included标头添加为依赖项?


一个侧面问题:我应该使用更好的构建工具,而不是SCons,我可以编写自定义构建器/工具/命令,并手动获取这些工具以某种方式提供自定义依赖项(例如:使用gcc' s -H或-M选项并将它们转换为构建工具的输入格式。

我已经破解了make来实现这一点,但是它非常冗长,我已经使用了预处理makefile(然后使用sed来添加标签)。 (我稍后可能会将其作为一个问题/示例扔出去。)



好的,我现在有

import SCons.Scanner env = Environment(BUILDERS = {'T_s2r' : Builder(action = 'g++ -x c++ -std=c++11 -o $TARGET $SOURCE $OPTS', source_scanner = SCons.Scanner.C.CScanner())}) env.T_s2r("gen/run/proj.run", "code/src/main.cpp", OPTS = "-iquote code/include")

但是,当我改变标题时,这不会更新。


啊 - 扫描仪需要搜索路径。

my_scanner = SCons.Scanner.C.CScanner() my_scanner.path = FindPathDirs('code/include') ... Builder(... source_scanner = my_scanner) ... ...

仍然没有。

1 个答案:

答案 0 :(得分:1)

是的,可以使用SCons Scanners在第一个问题中按照您的要求进行操作。考虑到你的第一个问题的答案是肯定的,其他两个不需要回答:)

至于你的问题,SCons非常灵活,而且非常易于扩展。添加自定义构建器和工具非常简单,我不知道任何其他具有这种灵活性的构建工具。