gpt4 book ai didi

python - 如何为 SCons 构建添加预处理和后处理操作?

转载 作者:行者123 更新时间:2023-11-28 19:15:22 25 4
gpt4 key购买 nike

我尝试在使用 SCons 构建项目时添加预处理和后处理操作。

SConstruct 和 SConscript 文件位于项目的顶部。

预处理操作:生成代码(通过调用不同的工具):-> 不知道在此预处理后将生成的确切文件(可以创建用于确定生成哪些文件的附加预处理,以便将它们提供给 SCons)

-> 运行外部脚本(python、pearl 脚本),在编译前执行

后处理操作:

->运行外部工具,运行应该链接后执行的外部脚本

到目前为止我尝试过的:

对于预处理:

  • 使用 python 中的 os.system 来运行 cmd。 (工作正常,但我正在寻找“SCons 解决方案”)
  • 使用 SCons 中的 AddPreAction(target, action) 函数。不幸的是,这个函数是在编译项目之后执行的,因为 SCons 用户手册指出:“指定的 pre_action 将在 scons 调用实际生成的链接命令之前执行
    可执行程序二进制 foo,而不是在将 foo.c 文件编译成目标文件之前。”

对于后处理:

  • 使用 AddPostAction(target, action) 幸运的是,它工作正常。

我正在寻找能让 SCons 以某种方式意识到这个前后过程的解决方案。

我的问题如下:

对于上述要求,使用 SCons 的最佳方法是什么?有没有办法使用 SCons 内置函数在编译前执行预处理操作?

最佳答案

您没有详细说明您为使预处理部分正常工作所做的努力。一般来说,您应该尝试为代码生成部分创建真正的构建器……这将使 SCons 更容易检测和处理依赖项(以及作为用户的您;))。您可能想在 https://bitbucket.org/scons/scons/wiki/ToolsForFools 查看我们的 Wiki。 ,我们在其中详细解释了如何编写新的构建器。

如果您需要在每个构建上运行额外的脚本,您应该能够通过 os.system() 或适当的 subprocess 调用来触发这些脚本例如,您的顶级 SConstruct 的开始。但是我从你最近的编辑中得到的,我将主要引用你提出的第一个问题,是你正在尝试对某种“分阶段”构建过程进行建模。您认为您需要一个“预处理”阶段,您可以在其中通过调用脚本 Hook 并创建您可能需要的所有其他 header 和源。我的猜测是,您正在尝试重写类似于原始 make/autotools 设置的内容,并希望尽可能重复使用部件,这当然不是一个坏主意。但是 SCons 不是阶段驱动的,而是依赖驱动的...因此您当前的方法不合适,迟早会导致问题。

你能做的最好的事情就是忘记 Pre- 和 PostActions 并直接获得你的依赖关系。除了编写您自己的构建器来替换您的脚本之外,您还必须为这些构建器中的每一个实现适当的发射器。这个发射器(查看上面提到的工具指南)必须解析进入脚本的输入文件,并返回将在脚本实际运行时生成的文件名列表。像这样,SCons 将先验知道构建脚本运行后会生成哪些文件,并且可以使用这些名称来解决已经存在的依赖关系(即使实际文件尚不存在)。

对于后处理部分:这通常使用标准的 Python atexit 处理程序来处理。参见例如How do I run some code after every build in scons?举个例子。

关于python - 如何为 SCons 构建添加预处理和后处理操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34263389/

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