我有一个仅包含头文件的库,包含文件夹层次结构和一堆我要安装的.hpp
文件。我的问题是,scons 不将文件夹复制到build文件夹中。
以下是我的目录布局:
root
SConstruct
subdir
SConscript
the_lib
subdir_a
header_a.hpp
subdir_b
header_b.hpp
build
(...)
以下是我在subdir/SConscript
中所做的事情:
all_headers = []
for root, dirnames, filenames in os.walk('.'):
for filename in fnmatch.filter(filenames, '*.hpp'):
fn = os.path.join(root, filename)
all_headers.append((fn, root))
for f, d in all_headers:
install.AddHeader( f, d )
我这样做是为了获取文件名及其相对路径,然后,我使用我前几天在scons wiki中找到的安装程序。
观察:all_headers
仍为空,因为the_lib
文件夹未被复制。我累了subdir_env.Dir('the_lib')
,但没有改变一件事。
运行脚本后,我的the_lib/SConscript
文件夹中有build
,但没有别的。当然,我可以理解我的文件系统在这种情况下什么都不做。
任何人都可以帮助我吗?
更新
我找到的唯一方法是运行find -name "*.hpp"
并将结果粘贴到我的SConscript
。现在就像魅力一样,但由于库是外部库(可能添加或删除了一些文件),我想到了一个更通用的解决方案,而无需按名称知道所有标题。
答案 0 :(得分:2)
我想到的第一件事就是使用SCons Install() builder,但这是在不同的位置安装实际的SCons目标,并且由于这些头文件不是目标,因此不起作用。
因此,在这种情况下,您可以使用所谓的SCons Copy Factory。
答案 1 :(得分:0)
如果构建是VariantDir
,那么您不需要自己复制文件,如果在任何构建器中使用标头,scons将会这样做。
如果你想要一个文件列表,你可以使用env.Glob('*/*.hpp')
(但通配符赢得了遍历目录,所以你需要知道深度)