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)为调试和发布版本创建环境对象的正确(可移植)方法是什么? 我实施的方式是正确的吗?
请建议进行必要的更改以避免警告并成功运行构建。
答案 0 :(得分:-1)
您的问题与构建变体无关,但事实上您有两个具有相同名称的目标(SharedLibrary
和StaticLibrary
都构建sum
)。
要解决这个问题,要么只给其中一个名字,要么至少向其中一个添加一个扩展名。如果添加扩展,如果要保持跨平台兼容性,可能需要检查操作系统。