gpt4 book ai didi

scons - 如何将构建版本添加到 scons 构建

转载 作者:行者123 更新时间:2023-12-01 11:58:00 35 4
gpt4 key购买 nike

目前我正在使用一些魔法将当前的 git 修订版放入我的 scons 构建中。我只是获取版本并将其粘贴到 CPPDEFINES 中。它工作得非常好......直到版本更改并且 scons 想要重建所有内容,而不仅仅是已更改的文件 - 因为所有文件使用的定义都已更改。

理想情况下,我会使用名为 git_version.cpp 的自定义生成器生成一个文件,并且那里只有一个函数可以返回正确的标签。这样只有一个文件会被重建。

现在我确信我已经看到了一个教程,它确切地展示了如何做到这一点……但我似乎无法找到它。我发现自定义生成器的东西在 scons 中有点奇怪......

所以任何指针将不胜感激...

无论如何,这就是我目前正在做的,仅供引用:

# Lets get the version from git
# first get the base version
git_sha = subprocess.Popen(["git","rev-parse","--short=10","HEAD"], stdout=subprocess.PIPE ).communicate()[0].strip()
p1 = subprocess.Popen(["git", "status"], stdout=subprocess.PIPE )
p2 = subprocess.Popen(["grep", "Changed but not updated\\|Changes to be committed"], stdin=p1.stdout,stdout=subprocess.PIPE)
result = p2.communicate()[0].strip()

if result!="":
git_sha += "[MOD]"

print "Building version %s"%git_sha

env = Environment()
env.Append( CPPDEFINES={'GITSHAMOD':'"\\"%s\\""'%git_sha} )

最佳答案

您不需要自定义生成器,因为这只是一个文件。您可以使用一个函数(作为 Action 附加到目标版本文件)来生成您的版本文件。在下面的示例代码中,我已经计算了版本并将其放入环境变量中。您可以这样做,或者您可以将调用 git 的代码放在 version_action 函数中。

version_build_template="""/*
* This file is automatically generated by the build process
* DO NOT EDIT!
*/

const char VERSION_STRING[] = "%s";

const char* getVersionString() { return VERSION_STRING; }
"""

def version_action(target, source, env):
"""
Generate the version file with the current version in it
"""
contents = version_build_template % (env['VERSION'].toString())
fd = open(target[0].path, 'w')
fd.write(contents)
fd.close()
return 0

build_version = env.Command('version.build.cpp', [], Action(version_action))
env.AlwaysBuild(build_version)

关于scons - 如何将构建版本添加到 scons 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942452/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com