Scons复制头文件以构建目录

我正在尝试使用scons将我的源目录中的许多头文件复制到构建目录中的'includes'目录。 我的目标是一个静态库,我想把它和它的相关头文件一起分发。 预期的最终结果:

build
|-- objects -> .o output files for constructing libmclib.a
|-- includes
|   |-- foo.h
|   `-- bar.h
`-- libmclib.a

我的SConstruct:

#!python
target = 'mock'

env = Environment(LINKCOM = "$LINK -o $TARGET $SOURCES $LINKFLAGS $CCFLAGS")
Export('env', 'target')

build_base = 'build'
SConscript('SConscript', variant_dir=build_base, duplicate=0)

# remove build directory
if GetOption('clean'):
    import subprocess
    subprocess.call(['rm', '-rf', build_base])

我的SConscript:

#!python
Import('env')

# ...
# other stuff to build 'mclib_target'
# ...

def copy_header_files(target, source, env):
    Mkdir(target)
    header_files = []
    for d in env['CPPPATH']:
        header_files += Glob(d + "/*.h")
    for f in header_files:
        Copy(target, f)

# copy all relevant header files
env.Command("includes", mclib_target, copy_header_files)

Scons用参数'[“build / includes”],[“build / libmclib.a”]调用'copy_header_files',但由于某些原因'Mkdir'不创建includes目录。 另外'复制'似乎什么都不做。 如果我然后像这样打电话给Mkdir:

env.Command("includes", mclib_target, [Mkdir('$TARGET')])

它似乎运作良好。 如何修复/解决此问题? 我对Scons也很陌生,所以我们欢迎任何替代方案来完成这项任务。 我正在使用scons 2.5.0。


您可能想使用“ Install() ”而不是“ Copy() ”。 Mkdir()也不需要,SCons会自动为目标创建所有中间文件夹。

最后,请允许我对您的一般方法提出一些意见:我宁愿不将“建筑”与“安装/准备包装”混合在一起。 “ variant_dir ”选项可帮助您从相同的源文件(假设您有一个名为“src”的文件夹)构建多个“变体”(发布,优化,调试,ARM特定的...)。 通过将当前“build”目录的名称传递到“src”SConscript中,您可以将特定于变体的知识嵌入到您的本地构建描述中,这意味着您必须通过添加的每个变体来触及它。 相反,您应该将“ Install/Package ”步骤移到顶级SConstruct中,您可以从中获得有关构建哪些变体的全局知识。 从那里你可以复制(=安装)最终文件到一个单独的子文件夹,例如distribution ,并将其归档。

有关如何在SCons中处理变体的简单示例,请查看repo https://bitbucket.org/dirkbaechle/scons_talks和那里的“ pyconde_2013/examples/exvar ”文件夹。


您正在使用的Mkdir和Copy操作是用于命令定义的操作工厂,在Platform-Independent File System Manipulation中描述:

SCons提供了许多独立于平台的功能,称为工厂,用于执行常见的文件系统操作,如复制,移动或删除文件和目录,或制作目录。 这些函数是工厂,因为它们在被调用时不会执行操作,它们每个都会返回一个可以在适当的时间执行的Action对象。

尝试在我自己的操作功能中使用这些功能时,我总是遇到问题。 也许我错过了一些东西,但我不认为这些功能可以用在“命令”构建器的直接操作列表之外。

相反,我在python中使用与平台无关的函数来创建目录和复制文件,例如os.makedirsshutil.copy

链接地址: http://www.djcxy.com/p/67921.html

上一篇: Scons copy header files to build directory

下一篇: Invoking scons from a Python script