我正在尝试使用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 目录。同时 'Copy' 似乎也没有起到作用。不过如果我这样调用 Mkdir:
env.Command("includes", mclib_target, [Mkdir('$TARGET')])
看起来它运行良好。如何解决/绕过这个问题?我对Scons也很陌生,如果有其他做这个任务的替代方案也欢迎。我正在使用Scons 2.5.0。