3

我有一个仅包含标题的库,其中包含一个文件夹层次结构和一堆.hpp我想安装的文件。我的问题是,scons 不会将该文件夹复制到构建文件夹中。

这是我的目录布局的样子:

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/SConscriptbuild文件夹中有,但没有别的。当然,我可以理解我的文件系统遍历在这种情况下什么都不做。

谁能帮我?

更新

我发现的唯一方法是运行 afind -name "*.hpp"并将结果粘贴到我的SConscript. 现在就像一个魅力,但由于库是一个外部库(并且可能添加或删除了一些文件),我想到了一个更通用的解决方案,而不需要知道所有标题的名称。

4

2 回答 2

2

我想到的第一件事是使用 SCons Install() builder,但那是在不同的位置安装实际的 SCons 目标,并且由于这些头文件不是目标,因此不会起作用。

因此,在这种情况下,您可以使用所谓的 SCons Copy Factory

于 2013-05-21T17:31:36.323 回答
0

如果 build 是 aVariantDir那么您不需要自己复制文件,如果在任何 Builder 中使用了标头,scons 就会这样做。

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

于 2013-05-21T20:18:56.027 回答