SCons 动态构造变量
SCons Dynamic Construction Variable
我想在 SCons 中有一个动态环境变量。
示例:将 -DFILE_NAME=file.c
添加到构建命令。
env['FILE_NAME'] = ['${str($TARGET).upper()}']
env.Append(CPPDEFINES={'FILE_NAME': '$FILE_NAME'})
我不确定这是否可行,但 _concat
、source 的文档或 CCPDBFLAGS
的旧文档使它看起来像是可能的。
使用 SCons 3.1.1
这其实是一个bug。解决方法如下。
import hashlib
env = Environment(platform='darwin')
env['CC'] = 'clang'
# env.Append(CPPDEFINES={'SOURCE': '$SOURCE'})
# env.Append(CPPDEFINES={'TARGET': '$TARGET'})
def fileHashGenerator(env, target, source):
print("'%s' '%s' '%s'" % (env, target, source))
if source:
print("has source")
fileHash = int(hashlib.sha1(source.path.encode()).hexdigest(), 16) % (10 ** 8)
print(fileHash)
h = (fileHash).to_bytes(8, byteorder='big').hex()
print(h)
return h
else:
print("No target", type(target))
return 'NOTHING'
env['FILE_HASH'] = '${fileHashGenerator(__env__,TARGET,SOURCE)}'
# env.Append(CPPDEFINES={'FILE_HASH': '$FILE_HASH'})
env.Append(CPPFLAGS=['-DFILE_HASH=$FILE_HASH'])
env.Append(CPPFLAGS=['-DFILE_TARGET=${TARGET}'])
env.Append(CPPFLAGS=['-DFILE_SOURCE=$SOURCE'])
env['fileHashGenerator'] = fileHashGenerator
env.Program('main', ['main.c'])
不要使用 CPPDEFINES
,而是将其附加到 CPPFLAGS
。感谢@bdbaddog 在 SCons discord 中的协助。
我想在 SCons 中有一个动态环境变量。
示例:将 -DFILE_NAME=file.c
添加到构建命令。
env['FILE_NAME'] = ['${str($TARGET).upper()}']
env.Append(CPPDEFINES={'FILE_NAME': '$FILE_NAME'})
我不确定这是否可行,但 _concat
、source 的文档或 CCPDBFLAGS
的旧文档使它看起来像是可能的。
使用 SCons 3.1.1
这其实是一个bug。解决方法如下。
import hashlib
env = Environment(platform='darwin')
env['CC'] = 'clang'
# env.Append(CPPDEFINES={'SOURCE': '$SOURCE'})
# env.Append(CPPDEFINES={'TARGET': '$TARGET'})
def fileHashGenerator(env, target, source):
print("'%s' '%s' '%s'" % (env, target, source))
if source:
print("has source")
fileHash = int(hashlib.sha1(source.path.encode()).hexdigest(), 16) % (10 ** 8)
print(fileHash)
h = (fileHash).to_bytes(8, byteorder='big').hex()
print(h)
return h
else:
print("No target", type(target))
return 'NOTHING'
env['FILE_HASH'] = '${fileHashGenerator(__env__,TARGET,SOURCE)}'
# env.Append(CPPDEFINES={'FILE_HASH': '$FILE_HASH'})
env.Append(CPPFLAGS=['-DFILE_HASH=$FILE_HASH'])
env.Append(CPPFLAGS=['-DFILE_TARGET=${TARGET}'])
env.Append(CPPFLAGS=['-DFILE_SOURCE=$SOURCE'])
env['fileHashGenerator'] = fileHashGenerator
env.Program('main', ['main.c'])
不要使用 CPPDEFINES
,而是将其附加到 CPPFLAGS
。感谢@bdbaddog 在 SCons discord 中的协助。