SCONS 运行目标

2024-01-17

我一直在寻找、寻找,但找不到我的问题的答案。 我今晚刚刚开始学习 scons,看起来棒极了!不过我遇到了一点困惑。

为了便于开发,我经常喜欢让我的 make 文件构建我的目标,然后运行它,以便我可以通过一次按键来测试更改。这在 make 文件中非常简单:

run: $(exe)
    chmod a+x $(exe)
    $(exe)

我发现我可以使用子进程来做到这一点,如下所示:

import subprocess import os.path

env = Environment();
result = env.Program(target = "FOO", source = "BAR");
location = os.path.abspath(result[0].name)
subprocess.call([location])

但这个解决方案有一个问题。据我试验, scons 不会等到你的程序完成构建才开始子进程调用,所以你最终会运行旧的可执行文件,或者如果它是清理后的构建,则会出现错误。


您在 scons 文件中所做的操作是 scons 中典型的初学者错误。您假设您正在编写用于构建项目的脚本。

Scons 不是这样工作的。 scons 文件是一个脚本,添加targets到项目。这是通过 python 完成的,各种对象允许您创建和操作目标,直到脚本完成。首先,该项目将开始建设。

您在代码中所做的就是描述环境使用时,将Program创建,然后调用运行某个程序的子进程。此后,项目将开始构建 - 难怪旧的可执行文件已运行,新的可执行文件尚未开始构建。

您应该做的是使用自定义构建器来执行程序。

env = Environment() #construct your environment
files = "test.cpp" #env.Glob or list some files

#now we create some targets
program = env.Program("test",files) #create the target *program*
execution = env.Command(None,None,"./test") #create the execution target (No input & output

Depends(execution,program) #tell scons that execution depends on program
#there might be a way to get SCons to figure out this dependency itself

#now the script is completed, so the targets are built

这里依赖关系很清楚,程序必须在执行完成之前构建,并且它会

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

SCONS 运行目标 的相关文章

  • 为什么 SCons VariantDir() 不将输出放入给定目录中?

    我正在考虑使用SCons一个新项目 它看起来真的很好 虽然我发现VariantDir相当混乱 我有一个简单的项目 在一个目录中包含一些 C 源文件 我想以 正常 和 配置文件 模式构建 使用两组不同的 gcc 选项 我希望输出分别进入正常
  • 如何在 scons 中每次构建后运行一些代码?

    我正在寻找一种方法来注册诸如 scons 中的最终构建回调之类的东西 例如 我现在正在做这样的事情 def print build summary failures SCons Script GetBuildFailures notifyE
  • 从 Repository() 编译的源代码未放入分层 SCons 项目的变体目录中

    我有一个分层项目 它使用公共系统目录中的源代码 为此我使用 SConsRepository 函数并希望将所有构建输出 本地代码和从存储库中获取的代码 放置在variant dir中 如果我使用Repository 在简单场景中运行函数 非分
  • COBOL 的 Scons

    我想在 scons 中创建一个与 COBOL 一起使用的构建器 这是一个开始 import re Import env Source src cpy COPYBK1 cpy src cpy COPYBK2 cpy src cpy COPYB
  • 如何为使用 SCons 构建的程序内置 gprof 支持?

    问候 这是我的 SConstruct 文件 env Environment env Append CCFLAGS g pg env Program target program1 source program1 c 这也是编译的输出 sco
  • 使用 SCons 进行真正的分层构建?

    所以我读过这里有关分层构建的问题 例如 使用 SCons 创建分层构建 https stackoverflow com questions 3709321 creating a hierarchical build with scons 我
  • 为什么 dlopen 函数内传递的 std::any 的 std::any_cast 会引发错误

    我正在摆弄 c 17 和插件 并且遇到了一个无法解决的错误 在下面的 MWE 中 我可以调用一个本地函数 该函数接受std any 当我尝试阅读内容时 一切都按预期进行 当我通过插件 dlopen 加载这个完全相同的函数时 它正确地看到了a
  • 如何测量 scons 构建的每个组件的构建时间?

    我有一个使用 scons 构建的大型 C 项目 它的构建速度很慢 我想进行一些更改以使其构建速度更快 现在我想集中时间加速构建中最慢的部分 如何找出哪些文件的编译时间最长 我知道这个问题很旧 并且已经被接受 但最近从另一个问题中引用了它 我
  • 如何过滤 SCons Glob 结果?

    我有时想从 SCons 的 Glob 结果中排除某些源文件 通常是因为我想用不同的选项编译该源文件 像这样的事情 objs env Object Glob cc objs env Object SpeciallyTreatedFile cc
  • SCONS 运行目标

    我一直在寻找 寻找 但找不到我的问题的答案 我今晚刚刚开始学习 scons 看起来棒极了 不过我遇到了一点困惑 为了便于开发 我经常喜欢让我的 make 文件构建我的目标 然后运行它 以便我可以通过一次按键来测试更改 这在 make 文件中
  • 如何将交叉编译器与 Scons 一起使用?

    遵循建议关于斯康斯常见问题解答 http www scons org wiki FrequentlyAskedQuestions Why doesn 27t SCons find my compiler 2BAC8 linker 2BAC8
  • “cl”未被识别为内部或外部命令

    下面是我在 windows7 中运行 scons 编译器时的错误消息 cl is not recognized as an internal or external command operable program or batch fil
  • 使用 scons 编译带有 -std=c++11 标志的 c++ 文件

    我正在尝试使用 scons 编译带有 std c 11 选项的 c 文件 文件 测试 cc include
  • 无法运行 scons 并出现导入错误

    我已经安装了 scons 2 3 2 并安装了 python 2 4 当我运行 scons 时 我看到以下错误 scons Import failed Unable to find SCons files in usr bin engine
  • ant+cpptasks 与 scons 与 make

    我正在调查scons http www scons org 我只是想确保在我将大量脑细胞投入到完全不同的事物之前我知道替代方案是什么 我过去一直在使用 GNU make 但从来没有对它感到特别满意 特别是 为什么 Ant 没有更频繁地用于
  • Scons:仅当目标发生更改时才生成版本文件

    我需要从 SCons 脚本生成 version cc 文件 仅当目标的任何源文件发生更改时才应生成此文件 假设 SCons 脚本有以下语句 python function which generates version cc in the
  • 需要帮助调试缓慢的 scons 运行时

    我正在使用 scons 构建两个项目 一个项目效果很好 而另一个 更复杂 项目则非常令人沮丧 这是我在为第二个项目运行 scons 时看到的内容 S time scons scons Reading SConscript files lt
  • 如何解决 CheckLib 返回 false 的问题?

    Scons版本是2 3 3 这是构建脚本的相关部分 if not conf CheckLib portaudio raise Exception Did not find libportaudio a portaudio lib or th
  • 如何设置 scons 系统包含路径

    使用 scons 我可以轻松设置我的包含路径 env Append CPPPATH foo 这传递了标志 Ifoo to gcc 不过 我正在尝试在启用大量警告的情况下进行编译 特别是与 env Append CPPFLAGS Werror
  • 如何使用 scons 在调试模式下获取可执行文件

    我正在使用 scons 使用 vc10 和 Renesas 编译器进行编译 是否有任何命令可以在调试模式下获取可执行文件 如果我使用命令 执行我的项目scons然后输入 它将进入释放模式 我无法使用 Visual Studio 调试器调试该

随机推荐

  • 有没有办法判断iphone是否处于漫游状态?

    我正在开发一个 iPhone 应用程序 并且非常想确定该设备是否正在漫游 以便我可以智能地避免用户在脱离家庭网络时花费昂贵的连接费用 我正在编写的应用程序适用于越狱手机 但如果可能的话 我更愿意使用标准 SDK 这是我已经发现的 1 苹果S
  • 处理CursorLoader异常

    我有一个实现 LoaderManager 并使用 CursorLoader 的片段 没什么花哨的 我想捕获查询期间抛出的异常 但我不知道如何捕获 有什么帮助吗 谢谢 我尝试继承并实现一个侦听器 然后尝试继承并实现一个回调 就我而言 最简单且
  • sinon 存根不替换函数

    我正在尝试使用 sinon 存根来替换可能需要很长时间的函数 但是当我运行测试时 测试代码似乎没有使用 sinon 存根 这是我要测试的代码 function takeTooLong return returnSomething funct
  • ORM UniqueConstraint,空值重复

    我有一个对 3 个字段具有唯一约束的实体 2 个字段不可为空 第三个字段可为空 我的问题是 当第三个字段为空时 唯一约束不起作用 因此我可以在数据库中包含一些重复的值 例如 5 1 null 5 1 null 为我 5 1 null 是一个
  • Drupal 6 到 7 迁移

    我们有一个用 drupal 6 编写的 drupal 站点 我们知道我们必须为 drupal 7 重写它 大部分 但最重要的部分是迁移数据 CCK migrate 只能迁移大约 90 的田地 我正在寻找一种干净的方法将 drupal 6 数
  • 如何在 Angular 的构造函数中使用 @Inject 文本测试组件

    Angular 6 我在组件的构造函数中声明了一些注入的变量 但是当我运行时 我不知道如何在单元测试文件中配置注入的值ng test它给出了以下错误 错误 StaticInjectorError DynamicTestModule 标题 S
  • 如何更改代码中 Xaml 资源中的颜色定义 (UWP)

    UWP 我有许多带有来自 App xaml 的颜色绑定的网格 主页 xaml
  • 错误:未找到:'dart:ui' import 'dart:ui' show lerpDouble;

    块引用 错误 未找到 dart ui 导入 dart ui 显示 lerpDouble 使用 F5 来运行代码 而不是 运行代码 按钮 右上角的三角形图标 因为 vscode 将运行您当前正在使用的文件而不是整个项目
  • 2 个日期值之间的随机时间和日期

    我正在尝试编写一个 php 脚本 或代码行 来回显两个日期之间的随机时间和日期 例如 2012 12 24 13 03 这将是我选择的日期2012年10月1日和2013年1月1日之间 有什么想法如何最好地做到这一点 提前致谢 简单 只需选择
  • 如何在 Angular/TypeScript 中组合两个 URLSearchParam?

    我有两个URLSearchParams物体 我想将这两个物体结合起来制作第三个 例如 我可以有 let params1 new URLSearchParams params1 set page one params1 set size hu
  • 将 Logstash json 消息分解为字段

    它有一个日志文件 用于存储带有时间戳和 json 消息的事件 例如 时间戳 foo 12 bar 13 我想将 json 部分中的键 foo 和 bar 分解为 Logstash 输出中的字段 我知道我可以将 Logstash 文件过滤器中
  • VS Code Python 中的“启动 Jupyter 服务器”

    我已经安装了带有 Python 扩展的 VS Code 我已经使用 Anaconda 发行版创建了一些 conda 环境 当我以交互模式运行任何 python 代码时 在下面的部分中显示 正在启动 jupyter 服务器 并且代码继续运行
  • 使用一个查询从 mysql 表创建带有 rowspan 的 html 表?

    我有个问题 假设我有一个具有以下结构的关系表 ClientInvoices id id client id invoice 1 1 1 2 1 2 3 2 3 4 3 4 5 1 5 您可以看到客户 1 有 3 张发票 每个客户可以有多个发
  • 在 SQLite.cs 中找不到类型或命名空间“Sqlite”

    我有一个使用 SQLite 的 Windows Phone 8 应用程序 该应用程序具有许多数据库功能 并包括一个 sqlite 数据库文件 该文件在运行应用程序时被复制到本地文件夹并进行访问 所有这些都没有问题 直到我第一次切换到发布版本
  • 无法使用带有 python 的 selenium 通过 sendkeys 将文件上传到 iframe 内的按钮元素

    环境 Python Selenium 我正在尝试将本地文件上传到上传文件按钮 首先 我尝试查看是否可以找到该元素并单击该按钮 我通过使用成功了 driver switch to frame upload frame driver find
  • 在 C++ 中声明基于函数参数的本地数组是合法的

    我从一本书中读到 以下 C 代码不应编译 void f int n int m int a n b n m 因为数组的大小不是在编译时确定的 但我尝试了一下 发现无论是全局函数还是成员函数 使用g 都可以编译成功 这在最近的 C 实现中是合
  • 如何从Java代码生成UML图(尤其是序列图)?

    如何从现有的 Java 代码生成 UML 图 尤其是序列图 ObjectAid UML 资源管理器 http www objectaid com home 是我用过的 这很容易已安装 https www objectaid com inst
  • C# 线程池限制线程数

    好吧 我已经对该网站进行了公平的搜索 并阅读了许多有关该主题的帖子 我发现这个问题 C 中的简单线程池代码 https stackoverflow com questions 435668 code for a simple thread
  • Python - 如何使用 ioctl 或 spidev 从设备读取输入?

    我有一个提供它的供应商提供了一些 C 代码来监听按钮按下 该代码使用ioctl 该设备具有 SSD1289 控制器 按钮不需要额外的引脚 可以通过 SPI 读取其状态 这就是我想要的 读取按下了哪个按钮 我试图在 Python 中为我自己的
  • SCONS 运行目标

    我一直在寻找 寻找 但找不到我的问题的答案 我今晚刚刚开始学习 scons 看起来棒极了 不过我遇到了一点困惑 为了便于开发 我经常喜欢让我的 make 文件构建我的目标 然后运行它 以便我可以通过一次按键来测试更改 这在 make 文件中