我正在尝试编写一个sconstruct文件,该文件将在目标目录中安装标头。预期的效果是:
cp include/a.h ../dest/a.h
cp include/b.h ../dest/b.h
或者同样好:
cp include/a.h ../dest/include/a.h
cp include/a.h ../dest/include/b.h
这是我到目前为止所拥有的:
env = Environment()
for header in Glob("include/*.h"):
env.Command(Dir("../dest").Append(header), header, Copy("$TARGET", "$SOURCE"))
env.Alias("includes", Dir("../dest").Append(header));
这显然不起作用,因为没有Append功能。 Glob返回Node对象,Dir也是Node对象。我无法弄清楚我应该如何将两个Node对象组合成一个更长的路径。有人可以帮忙吗?
答案 0 :(得分:1)
您不需要自己粘贴这些路径(感谢您描述了您尝试解决的实际问题)。您正在寻找已提供的Install()
方法。还请查看User Guide,第11章“在其他目录中安装文件:安装构建器”,但具体的解决方案看起来应该是这样的(从头到尾):
env = Environment()
includes = env.Install("../dest", Glob("include/*.h"))
env.Alias("includes", includes)
如果你应该真的需要这个
str(node)
将返回相关node
的路径。 ;)