gpt4 book ai didi

python - 使用 SCons 动态重新创建包含文件

转载 作者:行者123 更新时间:2023-12-01 07:17:58 25 4
gpt4 key购买 nike

我需要修复 SCons 项目,其中包含文件是由 SCons 动态生成的。我创建了一个简单的例子来说明这个问题。 SConstruct 看起来像这样:

current_time = Command("current_time.h",
None,
"echo '#define CURRENT_TIME' `date +%H%M` > $TARGET")
test = Program("test", "test.cpp", current_time)
# AlwaysBuild(current_time)

test.cpp:

include <iostream>
#include "current_time.h"
int main() {
std::cout << "the time is: " << CURRENT_TIME << std::endl;
}

当时间改变时,SCons 不会重建项目,因为它不是魔法。解决这个问题的一种方法是将 AlwaysBuild(current_time) 添加到 SCons 文件中。

在实际项目中,使用AlwaysBuild重建包含文件的成本相当高,而且每天只需要重建一次,因为改变的不是时间而是日期。那么,如何才能实现该文件每天只重新生成一次呢?

解决方案:我创建了一个返回生成的包含文件内容的函数:

def include_file_contents():
...
return file_contents # str

然后,我将依赖项中的 None 替换为 Value(include_file_contents()):

    current_time = Command("current_time.h",
Value(include_file_contents()),
"echo '#define CURRENT_TIME' `date +%H%M` > $TARGET")

最佳答案

这样的事情应该有效:

import time
now=time.strftime("%H:%M",time.localtime())
current_time = Command("current_time.h",
Value(now),
"echo '#define CURRENT_TIME' %s > $TARGET"%now)
test = Program("test", "test.cpp")

您不必将 current_time.h 作为源。 SCons 将扫描 test.cpp 并找到包含的文件。

关于python - 使用 SCons 动态重新创建包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57854746/

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