我有一个只有头的库,由一个文件夹层次结构和一堆我想安装的.hpp文件组成。我的问题是,scon不会将文件夹复制到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 )我这样做是为了获得文件名和它们的相对路径,然后,我使用我前几天在scon wiki中找到的安装程序。
注意:all_headers仍然是空的,因为the_lib文件夹没有被复制。我累了subdir_env.Dir('the_lib'),但什么也没改变。
运行脚本后,我的build文件夹中有build,但没有其他内容。当然,我可以理解,在这种情况下,我的文件系统can什么也不做。
有谁可以帮我?
更新
我发现的唯一出路是运行find -name "*.hpp"并将结果粘贴到SConscript中。现在工作起来很有魅力,但是由于库是外部库(可能会添加或删除一些文件),我想出了一个更通用的解决方案,而不需要知道所有标题的名称。
发布于 2013-05-21 17:31:36
我想到的第一件事是使用SCons 安装()建造器,但那就是在不同的位置安装实际的SCons目标,而且由于这些头文件不是目标,这是行不通的。
因此,在本例中,您可以使用所谓的SCons 复制工厂。
发布于 2013-05-21 20:18:56
如果build是一个VariantDir,那么您不需要自己复制文件,如果在任何生成器中使用标头,scon就会这样做。
如果你想要一个文件列表,你可以使用env.Glob('*/*.hpp') (但是通配符不会遍历目录,所以你需要知道深度)
https://stackoverflow.com/questions/16674516
复制相似问题