2015-03-02 83 views
0

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

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

,我已经仙SO上关于它的唯一的事情是这样的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

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

+0

当我使用安装构建器时,它会在我当前工作目录结尾的位置上显示。所以我会把它安装在“/ Users/dev/install /”中,但是我会得到/ Users/dev/pic/src/platform/Users/dev/install,这看起来很奇怪。 – steffan 2015-03-03 02:30:51

+0

@steffan,看起来很奇怪。你能显示你的代码吗? – Brady 2015-03-04 15:37:16

+0

我将用代码更新原始帖子。最后有几点意见。 – steffan 2015-03-05 16:02:43