告诉 SCons 不要自动创建目录?

2024-02-09

我正在尝试让 SCons 查看我需要的 git 存储库(并希望使该存储库保持最新)。问题是我必须告诉它 git 存储库包含哪些文件才能在构建中使用它们,如果我这样做,SCons 将在尝试克隆存储库之前创建存储库。

例如,假设我想克隆 GStreamer,并使用create-uninstalled-setup.sh脚本(这不是我实际上正在做的,但它是一个更简单/更快的脚本,存在同样的问题):

Command(['gstreamer/.git', 'gstreamer/scripts/create-uninstalled-setup.sh'],
    None, 'git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
    'gstreamer/scripts/create-uninstalled-setup.sh')

但它失败了,因为 SCons 在尝试克隆 gstreamer 之前创建了 gstreamer/scripts:

$ scons
scons:读取 SConscript 文件...
scons:完成读取 SConscript 文件。
scons:建立目标...
git 克隆 git://anongit.freedesktop.org/git/gstreamer/gstreamer
致命:目标路径“gstreamer”已存在并且不是空目录。
scons:*** [gstreamer/.git] 错误 128
scons:构建因错误而终止。
$ ls gstreamer/
脚本

如果我告诉第一个命令它创建“gstreamer”文件夹,它会创建一个依赖循环:

Command(['gstreamer', 'gstreamer/scripts/create-uninstalled-setup.sh'],
    None, 'git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
    'gstreamer/scripts/create-uninstalled-setup.sh')

$ scons
scons:读取 SConscript 文件...
scons:完成读取 SConscript 文件。
scons:建立目标...
scons:完成构建目标。

scons:*** 发现依赖循环:
gstreamer/scripts -> gstreamer/scripts/create-uninstalled-setup.sh -> gstreamer/scripts
gstreamer/scripts/create-uninstalled-setup.sh -> gstreamer/scripts -> gstreamer/scripts> /create-uninstalled-setup.sh

文件“/usr/lib/scons/SCons/Taskmaster.py”,第 1019 行,清理中

如果我不告诉第一个命令它创建“create-uninstalled-setup.sh”,它会感到困惑,因为它不存在:

Command(['gstreamer'],
    None, 'git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
    'gstreamer/scripts/create-uninstalled-setup.sh')

$ scons
scons:读取 SConscript 文件...
scons:完成读取 SConscript 文件。
scons:建立目标...
scons:*** [~/gst/git] 未找到源“gstreamer/scripts/create-uninstalled-setup.sh”,目标“~/gst/git”需要。
scons:构建因错误而终止。

作为解决方法,我可以rm -rf我克隆之前的文件夹,但这显然不理想:

Command(['gstreamer/.git', 'gstreamer/scripts/create-uninstalled-setup.sh'], None,
    'rm -rf gstreamer && git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')
Command('~/gst/git', 'gstreamer/scripts/create-uninstalled-setup.sh',
    'gstreamer/scripts/create-uninstalled-setup.sh')

有更好的方法来处理这个问题吗?


既然没有办法告诉git该目录确实是空的(即使它有空的子目录),并且我们不知道如何判断SCons不要自动创建子目录,您可以创建自己的依赖项检查并调用git cloneSCons Execute()函数,该函数在任何之前执行SCons执行内置依赖性检查,如下所示:

import os.path

setup_file = 'gstreamer/scripts/create-uninstalled-setup.sh'
if not os.path.exists(setup_file)
    Execute('git clone git://anongit.freedesktop.org/git/gstreamer/gstreamer')

Command('~/gst/git', setup_file, setup_file)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

告诉 SCons 不要自动创建目录? 的相关文章

  • 03 SCons 自动构建工具编译hello.c

    安装mingw 我的电脑已经安装过 xff0c 下面主要说下配置环境 我们将mingw的路径和scons的虚拟环境路径添加到临时的环境变量 这样做的好处是使用的时候添加 xff0c 不与其它版本的全局的环境变量冲突 后期我编译ARM程序时把
  • 斯康斯。使用 Glob 进行递归

    我使用 scons 几天了 有点困惑 为什么没有内置工具用于从给定根开始递归构建源 让我解释 我有这样的源码配置 src Core folder1 folder2 subfolder2 1 Std folder1 等等 这棵树可能更深 现在
  • 如何在 scons 中每次构建后运行一些代码?

    我正在寻找一种方法来注册诸如 scons 中的最终构建回调之类的东西 例如 我现在正在做这样的事情 def print build summary failures SCons Script GetBuildFailures notifyE
  • 使用 Python subprocess.call() 启动 ncurses 进程

    我正在尝试致电 ct ng http crosstool ng org 来自 SCons SConstruct 脚本 所以基本上来自 Python 使用以下方法 ret subprocess call mnt build pw build
  • 使用 SCons 管理 Python 3 代码

    在工作中 我的任务是将 Python 2 7 代码的大型库转换为 Python 3 x 该库包含许多使用 boost python for C 制作的脚本和扩展 所有这些都是用 SCons 构建的 它不能与 Python 3 x 解释器一起
  • COBOL 的 Scons

    我想在 scons 中创建一个与 COBOL 一起使用的构建器 这是一个开始 import re Import env Source src cpy COPYBK1 cpy src cpy COPYBK2 cpy src cpy COPYB
  • 使用 SCons 进行真正的分层构建?

    所以我读过这里有关分层构建的问题 例如 使用 SCons 创建分层构建 https stackoverflow com questions 3709321 creating a hierarchical build with scons 我
  • 如何告诉 scons 使用 C++11 标准

    我无法找到如何告诉 scons 接受 c 11 标准 SConstruct 文件 env Environment CPPPATH usr include boost CPPDEFINES LIBS SCONS CXX STANDARD c
  • 如何将 scons 指向安装在我的主目录中的不同编译器?

    我尝试编辑 SConstruct 以指向不同的 gcc 编译器 但它似乎总是使用 usr bin gcc 和 usr bin g 中定义的编译器 env DefaultEnvironment env CC home aaron devel
  • SCons配置文件和默认值

    我有一个使用 SCons 构建的项目 以及 MinGW gcc 具体取决于平台 这个项目依赖于其他几个库 我们称它们为libfoo and libbar 可以为不同的用户安装在不同的地方 目前 我的SConstruct文件嵌入了这些库的硬编
  • “cl”未被识别为内部或外部命令

    下面是我在 windows7 中运行 scons 编译器时的错误消息 cl is not recognized as an internal or external command operable program or batch fil
  • 告诉 SCons 不要自动创建目录?

    我正在尝试让 SCons 查看我需要的 git 存储库 并希望使该存储库保持最新 问题是我必须告诉它 git 存储库包含哪些文件才能在构建中使用它们 如果我这样做 SCons 将在尝试克隆存储库之前创建存储库 例如 假设我想克隆 GStre
  • 使用 scons 编译带有 -std=c++11 标志的 c++ 文件

    我正在尝试使用 scons 编译带有 std c 11 选项的 c 文件 文件 测试 cc include
  • SCons 长命令行 TEMPFILE 与 MinGW

    我正在尝试在 Windows 上使用 SCons 和 MinGW 从 gcc 和 gfortran 对象构建共享库 但在最终链接期间命令行太长 超过 18000 个字符 我知道我需要使用临时文件 响应文件 来传递命令行 但我找不到让 SCo
  • 无法运行 scons 并出现导入错误

    我已经安装了 scons 2 3 2 并安装了 python 2 4 当我运行 scons 时 我看到以下错误 scons Import failed Unable to find SCons files in usr bin engine
  • Scons:仅当目标发生更改时才生成版本文件

    我需要从 SCons 脚本生成 version cc 文件 仅当目标的任何源文件发生更改时才应生成此文件 假设 SCons 脚本有以下语句 python function which generates version cc in the
  • SCons 库和子库

    我有一个基于 SCons 的分层构建系统 我有一个根 SConstruct 它调用一个构建共享库的 SConscript 然后调用另一个构建依赖于共享库的可执行文件的 SConscript 所以这是我的问题 我对linux上共享库的理解是
  • 需要帮助调试缓慢的 scons 运行时

    我正在使用 scons 构建两个项目 一个项目效果很好 而另一个 更复杂 项目则非常令人沮丧 这是我在为第二个项目运行 scons 时看到的内容 S time scons scons Reading SConscript files lt
  • SCons:调用 Makefile 项目的构建

    SCons 提供了 env Command 理论上应该能够调用 配置 and make在 Makefile 项目上 然而 我的理解是 Makefile 项目文件夹首先必须复制到 SCons 的构建目录中 因为构建过程不应更改源树中的任何内容
  • 您如何使编译器行更短?

    通常 当我与其他人一起处理一个项目时 随着时间的推移 编译器在 Makefile 中获取的库路径和包含路径的数量会变得越来越多 此外 路径也可能会变得很长 这是一个例子 g c pipe O2 Wall W DQT BOOTSTRAPPED

随机推荐