我在SCons的并行构建中遇到目录依赖问题。 在以下(简化)层次结构中考虑具有单个SConstruct的两个项目:
- SConstruct
- project1
- src
- project2
- src
- build
- project1
- project2
- dist
- project1
- project2
project1和project2中的每一个都应该在相关的构建目录下构建(使用variant目录),并且需要在相关的dist目录下安装几个目标。
项目2取决于项目1的dist。我已经使用Depends()
语句显式地声明了这种依赖关系,如下所示:
Depends('project2', 'dist/project1')
当我使用非并行构建时,没有问题。项目1已完全构建,目标安装在dist
目录中,然后才构建项目2。但是,当我使用多个作业(4)时,正在为正在运行的Install()
构建器构建项目2,以便在项目1的dist
目录中安装所需的文件。
所以,我的问题是:
Depends(project2, dist/project1)
语句是指创建dist/project1
目录还是完成构建所有目录的子项?非常感谢,
釜谷。
答案 0 :(得分:1)
不要在Depends()函数中将实际目录指定为字符串,而是尝试指定SCons project1和project2构建器返回的实际目标。每个SCons构建器(或至少大多数)都将受影响的目标作为对象返回,并且最好使用此对象而不是文件/ directoy名称,因为如果您不使用完全相同的文件/目录路径,则不会考虑作为同一个目标。
以下是一个示例,相应填写内容:
project2Target = Install()
# Im not sure how you're building project1, so replace the builder
project1Target = Proj1DistBuiler()
Depends(project2Target, project1Target)