gpt4 book ai didi

scons - 如何让 SCONS 更新构建中使用的文件的内容

转载 作者:行者123 更新时间:2023-12-04 17:27:03 28 4
gpt4 key购买 nike

更新作为构建一部分的文件内容的正确 SCONS 方法是什么?

我使用 SCONS 来构建一个相当大的项目。但是为了一个简单的问题,假设它看起来像这样:

env.Program("foo", ["foo.c", "version.c"])

在某些构建条件下,需要使用新信息更新构建中的 CPP 文件之一的内容 - 实际上是版本信息。在上面的例子中,我需要修改“version.c”的内容。我想我可以用下面的例子很好地做到这一点:
env.Command(target="version.c", source=[], action=PythonFunctionToUpdateContents)
env.Program("foo", ["foo.c", "version.c"])

PythonFunctionToUpdateContents 将使用 target[0] 作为文件名,打开它,查找一些特定的文本,更改它,将更改写回同一个文件。不幸的是,上面的示例不起作用。 SCONS 在构建目标文件之前会自动删除它,因此我的“version.c”文件在更新之前就被删除了。

我尝试在 env.Command() 调用中将目标和源设置为同一个文件,但这只会创建一个依赖循环。

我知道我可以通过让 SCONS 生成整个 version.c 文件来解决这个问题,但这并不合适,因为 version.c 包含许多其他代码,这些代码可以作为正常开发的一部分进行更改。

最佳答案

通常的方法是使用“version.c.in”或“version-in.c”或您喜欢的任何称呼。修改它并将其输出到 version.c。您可以将“in”文件添加到您的版本控制系统,而 version.c 文件不会在那里。所以这一切的结果如下:

env.Command(target="version.c", source="version-in.c",
action=PythonFunctionToUpdateContents)
env.Program("foo", ["foo.c", "version.c"])

这也适用于其他构建系统 - 让输入文件也作为输出文件通常是一个坏主意。使用中间文件来完成工作要好得多。

关于scons - 如何让 SCONS 更新构建中使用的文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504834/

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