scon便携式和清洁的调试和发布方式一起构建

时间:2014-06-16 10:09:15

标签: python build scons

SConstruct:实现此文件以使用构建库进行调试和发布构建。

variant_dir设置为构建/调试以进行调试构建              &安培;设置为发布版本的构建/发布

import os
env = Environment()

releaseEnv = env.Clone(CCFLAGS = ['-O3'])
debugEnv   = env.Clone(CCFLAGS = ['-O0', '-g'])

debugDirPath   = os.path.join('build', 'debug')      # build/debug
releaseDirPath = os.path.join('build', 'release')  # build/release

if os.name == 'nt':
    releaseEnv.Replace(CCFLAGS = ['EHsc'])
    # windows specific flags
    debugEnv.Replace(CCFLAGS = ['EHsc', 'Zi', 'MTd'])

SConscript(dirs = 'src', name = 'SConscript', exports = {'env' : releaseEnv}, variant_dir = releaseDirPath, duplicate = 0)
SConscript(dirs = 'src', name = 'SConscript', exports = {'env': debugEnv}, variant_dir = debugDirPath, duplicate = 0)

SConscript :(在源目录中显示,包含a1.cpp和b1.cpp)

import os
Import('env')

src_list = Glob(os.path.join(Dir('#').abspath,  'src', '*.cpp'))

env.SharedLibrary(target='sum', source= src_list)
env.StaticLibrary(target='sum', source= src_list)

目录结构如下:

 root_dir -> SConstruct
          -> src
               -> SConscript
               -> sum.cpp
               -> mul.cpp

1)从root_dir运行scons会生成以下警告,虽然它是一个警告消息构建停止,但库不会被创建。

scons: * 为同一目标指定了两个具有不同操作的环境:/home/xyz/temp/src/mul.os 文件" / home / xyz / temp / src / SConscript",第7行,

  
    
      
        
          

使用src_list = Glob(' * .cpp')后,此问题已得到解决;

        
      
    
  

2)为调试和发布版本创建环境对象的正确(可移植)方法是什么?   我实施的方式是正确的吗?

请建议进行必要的更改以避免警告并成功运行构建。

1 个答案:

答案 0 :(得分:-1)

您的问题与构建变体无关,但事实上您有两个具有相同名称的目标(SharedLibraryStaticLibrary都构建sum)。

要解决这个问题,要么只给其中一个名字,要么至少向其中一个添加一个扩展名。如果添加扩展,如果要保持跨平台兼容性,可能需要检查操作系统。

相关问题