Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scon是一种可移植且更干净的调试和发布构建方式_Python_Build_Scons - Fatal编程技术网

Python scon是一种可移植且更干净的调试和发布构建方式

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

SConstruct:实现此文件是为了使用生成库进行调试和发布生成

变量_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的源目录中)

目录结构如下所示:

 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