首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCons:强制SCons复制文件

SCons:强制SCons复制文件
EN

Stack Overflow用户
提问于 2013-05-21 16:04:41
回答 2查看 1.6K关注 0票数 4

我有一个只有头的库,由一个文件夹层次结构和一堆我想安装的.hpp文件组成。我的问题是,scon不会将文件夹复制到build文件夹中。

下面是我的目录布局:

代码语言:javascript
复制
root
  SConstruct
  subdir
    SConscript
    the_lib
       subdir_a
         header_a.hpp
       subdir_b
         header_b.hpp
  build
    (...)

以下是我在subdir/SConscript中所做的

代码语言:javascript
复制
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中。现在工作起来很有魅力,但是由于库是外部库(可能会添加或删除一些文件),我想出了一个更通用的解决方案,而不需要知道所有标题的名称。

EN

回答 2

Stack Overflow用户

发布于 2013-05-21 17:31:36

我想到的第一件事是使用SCons 安装()建造器,但那就是在不同的位置安装实际的SCons目标,而且由于这些头文件不是目标,这是行不通的。

因此,在本例中,您可以使用所谓的SCons 复制工厂

票数 2
EN

Stack Overflow用户

发布于 2013-05-21 20:18:56

如果build是一个VariantDir,那么您不需要自己复制文件,如果在任何生成器中使用标头,scon就会这样做。

如果你想要一个文件列表,你可以使用env.Glob('*/*.hpp') (但是通配符不会遍历目录,所以你需要知道深度)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16674516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档