我试图从我的源目录中复制一些头文件到使用scons的我的构建目录中的'includes'目录。我的目标是一个静态库,我想把它和它的相关头文件一起分发。预期最终结果:Scons复制头文件以建立目录
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并称之为 'copy_header_files' 与参数“[ “构建/包括”],[ “build/libmclib.a”]',但由于某些原因'Mkdir'不创建includes目录。另外'复制'似乎什么都不做。如果我然后像这样打电话给Mkdir:
env.Command("includes", mclib_target, [Mkdir('$TARGET')])
它似乎很好。如何修复/解决此问题?我对Scons也很陌生,所以我们欢迎任何替代方案来完成这项任务。我正在使用scons 2.5.0。
这就是它!我用forv循环中的env.Command替换了env.Command,将每个头文件从构建目录(重复设置为1)复制到'distro'目录。我还将安装相关的东西移到了SConstruct脚本中,因为这确实是一个更好的方法。非常感谢 – MaartenVds