Python scon是一种可移植且更干净的调试和发布构建方式
SConstruct:实现此文件是为了使用生成库进行调试和发布生成 变量_dir设置为调试生成的生成/调试 &设置为版本生成的生成/发布Python scon是一种可移植且更干净的调试和发布构建方式,python,build,scons,Python,Build,Scons,SConstruct:实现此文件是为了使用生成库进行调试和发布生成 变量_dir设置为调试生成的生成/调试 &设置为版本生成的生成/发布 import os env = Environment() releaseEnv = env.Clone(CCFLAGS = ['-O3']) debugEnv = env.Clone(CCFLAGS = ['-O0', '-g']) debugDirPath = os.path.join('build', 'debug') # buil
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的源目录中)
目录结构如下所示:
root_dir -> SConstruct
-> src
-> SConscript
-> sum.cpp
-> mul.cpp
1) 从root_dir运行scons会生成以下警告,尽管这是一条警告消息build is stop,但不会创建库
SCON:*为同一目标指定了两个具有不同操作的环境:/home/xyz/temp/src/mul.os
文件“/home/xyz/temp/src/SConscript”,第7行,在
使用src_list=Glob('*.cpp')后,此问题已得到解决
2) 为调试和发布构建创建环境对象的正确(可移植)方法是什么?
我实施的方式正确吗
请建议进行必要的更改以避免警告并成功运行生成。您的问题与生成变体无关,而是您有两个同名的目标(
SharedLibrary
和StaticLibrary
两个生成sum
)
要解决这个问题,要么给其中一个起另一个名字,要么至少为其中一个添加一个扩展名。如果添加扩展,如果要保持跨平台兼容性,可能需要检查操作系统。这不是警告,而是错误。它不知道如何构建文件,因为它有两种不同的构建方式it@TomTanner那么解决办法是什么呢?您可以纠正错误并帮助我修复它吗?您应该使用variantDir()来设置构建变量。请参阅@TomTanner variant_dir的另一个选项是作为SConscript参数传递,我在示例中已经这样做了。。。这里的问题是src_列表是从显式路径生成的。。如果我使用src_list=Glob('*.cpp'),那么第一个错误就被解决了。现在我正在寻求关于第二个问题的建议…看起来你回答了第一个问题。您认为创建环境()的方法是合理的。尽管您可以使用CFLAGS创建一个,然后克隆它,并将这些CFLAGS设置为第二个值。所以只有2个环境,而不是3个。这不是抱怨,而是抱怨mul.os
root_dir -> SConstruct
-> src
-> SConscript
-> sum.cpp
-> mul.cpp