gpt4 book ai didi

python - scons复制头文件到构建目录

转载 作者:太空狗 更新时间:2023-10-30 02:09:03 25 4
gpt4 key购买 nike

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

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' 没有创建包含目录。此外,“复制”似乎什么也不做。但是,如果我这样调用 Mkdir:

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

看起来效果不错。如何解决/解决这个问题?我对 Scons 也很陌生,所以欢迎使用任何替代方法来完成这项任务。我正在使用 scons 2.5.0。

最佳答案

您可能想使用“Install()”而不是“Copy()”。此外,Mkdir() 应该不是必需的,SCons 会自动为其目标创建所有中间文件夹。

最后,请允许我对您的一般方法发表一些评论:我不想将“构建”与“安装/准备打包”混为一谈。 “variant_dir”选项可以帮助您从相同的源文件(假设您有一个文件夹)构建多个“变体”(发布、优化、调试、ARM 特定......)名为“src”)。通过将当前“构建”目录的名称传递到您的“src”SConscript,您将特定于变体的知识嵌入到您的本地构建描述中,这意味着您必须在添加的每个变体中接触它。相反,您应该将“Install/Package”步骤移动到顶级 SConstruct 中……您可以在其中全面了解构建了哪些变体。从那里您可以将最终文件复制(=安装)到一个单独的子文件夹,例如distribution,然后存档那个。

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

关于python - scons复制头文件到构建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39348788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com