Scons和外部目录

时间:2015-03-02 14:48:48

标签: python scons

我正在使用scons构建系统来构建共享库。这一切都很好,但现在我遇到了一些困难。

我无法让scons将输出文件移动到scons文件夹结构之外的目录。

我唯一关于它的事情是question here

如果我尝试编写一个python函数来执行此操作,该函数会在构建完成之前先运行,因此我会收到一些找不到错误的文件。

如何让scons将文件移动到定义SConstruct文件的目录之外的目录?

import os
import shutil

Import('env')

android_files = [

    'os_android.cpp',
    'pic_android.cpp',
    'file_access_android.cpp',
    'dir_access_android.cpp',
    'audio_driver_opensl.cpp',
    'file_access_jandroid.cpp',
    'dir_access_jandroid.cpp',
    'thread_jandroid.cpp',
    'audio_driver_jandroid.cpp',
    'ifaddrs_android.cpp',
    'android_native_app_glue.c',
    'java_glue.cpp',
    'cpu-features.c',
    'java_class_wrapper.cpp'
]

env = env.Clone()

if env['target'] == "profile":
    env.Append(CPPFLAGS=['-DPROFILER_ENABLED'])

android_objects=[]
for x in android_files:
    android_objects.append( env.SharedObject( x ) )

prog = None

abspath=env.Dir(".").abspath


pp_basein = open(abspath+"/project.properties.template","rb")
pp_baseout = open(abspath+"/java/project.properties","wb")
pp_baseout.write( pp_basein.read() )

refcount=1

name="libpic"+env["SHLIBSUFFIX"]
dir="#bin/"+name
output=dir[1:]
ANDROID_HOME=os.environ.get('ANDROID_HOME')
ant_build=Dir('.').abspath+"/java/"
ANT_TARGET=ant_build+'local.properties'
ANT_SOURCES=ant_build+'build.xml'
ANDROID_HOME=os.environ.get('ANDROID_HOME')
ANT_COMMAND='ant release -Dsdk.dir='+ANDROID_HOME+' -f $SOURCE'

for x in env.android_source_modules:
    pp_baseout.write("android.library.reference."+str(refcount)+"="+x+"\n")
    refcount+=1

pp_baseout.close()


pp_basein = open(abspath+"/AndroidManifest.xml.template","rb")
pp_baseout = open(abspath+"/java/AndroidManifest.xml","wb")
manifest = pp_basein.read()
manifest = manifest.replace("$$ADD_APPLICATION_CHUNKS$$",env.android_manifest_chunk)
pp_baseout.write( manifest )


for x in env.android_source_files:
    shutil.copy(x,abspath+"/java/src/com/android/pic")  

for x in env.android_module_libraries:
    shutil.copy(x,abspath+"/java/libs") 


env.SharedLibrary("#bin/libpic",[android_objects],SHLIBSUFFIX=env["SHLIBSUFFIX"])

env.Command('#platform/android/java/libs/armeabi/libpic_android.so', dir, Copy('platform/android/java/libs/armeabi/libpic_android.so', output))

apk = env.Command(ANT_TARGET, source=ANT_SOURCES, action=ANT_COMMAND)

#env.Install('[install_dir]', apk)
#Cannot get this part to work, tried env.Install() but donno
#if env['target'] == 'release_debug'
    #copy 'platform/android/java/bin/Pic-release-unsigned.apk' to templates as 'android_debug.apk'
#else:
    #copy 'platform/android/java/bin/Pic-release-unsigned.apk' to templates as 'android_release.apk'

1 个答案:

答案 0 :(得分:1)

您应该考虑使用SCons Install Builder。这是在SCons项目层次结构之外安装目标的唯一方法。