从 Repository() 编译的源代码未放入分层 SCons 项目的变体目录中

2023-12-08

我有一个分层项目,它使用公共系统目录中的源代码,为此我使用 SConsRepository()函数并希望将所有构建输出(本地代码和从存储库中获取的代码)放置在variant_dir中。

如果我使用Repository()在简单场景中运行函数(非分层,不调用子目录 SConscripts),则编译后的 Repository() 对象文件将按预期放置在variant_dir中。但是如果我在分层构建中执行相同的操作,则编译后的Repository()目标文件放置在项目根目录下。

假设我想使用位于系统目录中的以下源代码:

/usr/local/repoDir/repoFile.cc

我有以下项目结构:

# tree .
.
|-- SConstruct
|-- build
|   `-- linux_x86_64
`-- moduleA
    |-- localFile.cc
    `-- SConscript

以下是构建脚本:

构建

Edit:从对 Repository() 的调用中删除了文件名,感谢 Dirk Ba​​echle[电子邮件受保护]指出这一点。

env = Environment()

env.Repository('/usr/local/repoDir')

env['variantDir'] = 'build/linux_x86_64'

SConscript('moduleA/SConscript',
           exports = ['env'],
           variant_dir = env['variantDir'],
           duplicate = 0)

模块A/S征兵

import os

Import('env')

srcFiles = [
  'localFile.cc',
  #os.path.join(env['variantDir'], 'repoFile.cc'),          # fails to find source file
  #'#%s' % os.path.join(env['variantDir'], 'repoFile.cc'),  # fails to find source file
  #'repoFile.cc',                                           # fails to find source file
  '#repoFile.cc',  # only option that works, but places object in root proj dir
]

env.Append(CPPPATH = ['.', '#'])
env.Program(target = 'myApp', source = srcFiles)

我想要repoFile.cc要编译的文件并将其目标文件放置在build/linux_x86_64,而是将其放置在与根 SConstruct 相同的目录中。

从评论中可以看出moduleA/SConscript,我尝试参考repoFile.cc有几种不同的方法,唯一有效的方法就是其中提到的。此外,我尝试致电Repository()函数于moduleA/SConscript,但它并没有改变任何东西。

Edit: 这是编译输出

# scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o repoFile.o -c -Ibuild/linux_x86_64 -ImoduleA -I/usr/local/repoDir/moduleA -I/usr/local/repoDir/build/linux_x86_64 -I. -I/usr/local/repoDir /usr/local/repoDir/repoFile.cc
g++ -o build/linux_x86_64/localFile.o -c -Ibuild/linux_x86_64 -ImoduleA -I/usr/local/repoDir/moduleA -I/usr/local/repoDir/build/linux_x86_64 -I. -I/usr/local/repoDir moduleA/localFile.cpp
g++ -o build/linux_x86_64/myApp build/linux_x86_64/localFile.o repoFile.o
scons: done building targets.

以及生成的目录结构:

# tree .
.
|-- repoFile.o    <=== This file should be in build/linux_x86_64 NOT here
|-- SConstruct
|-- build
|   `-- linux_x86_64
|       |-- localFile.o
|       `-- myApp
`-- moduleA
    |-- localFile.cpp
    `-- SConscript

我查了一下,发现了这个,但并不完全相同:

Scons 使用存储库目录进行分层构建

关于如何将目标文件放在正确的位置有什么建议吗?


我在 SCons 用户邮件列表上问了同样的问题,并收到了一些部分回答这个问题的信息。谢谢Dirk Baechle帮助我解决这个问题。

The Repository()有效地发挥作用mounts传递到 SCons 项目根目录的目录:即SConstruct文件是。如果需要在 SCons 项目的子目录中引用 repo 子目录中的文件,则子目录名称(repo 目录和 scons 项目目录的名称)必须匹配。这就是为什么有不同的选项SConscript上述问题中的文件找不到 repo 文件。

如果repo子目录moduleA与文件一起存在repoFile.cc,那么它将按预期找到,并且编译后的对象将按预期放置在variant_dir中。

我认为有一个限制Repository()功能是你不能mount将 repo 目录复制到 SCons 项目子目录中。这听起来像是一个功能请求。

SCons 将编译后的目标文件放在源目录中这一事实对我来说似乎是一个错误。至少应该放在variant_dir根目录下。

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

从 Repository() 编译的源代码未放入分层 SCons 项目的变体目录中 的相关文章

  • 尽管所有测试都通过,但 TeamCity NUnit 构建步骤失败

    我正在设置 TeamCity 来运行一些 NUnit 测试 TeamCity 报告所有测试均已通过 但报告构建失败 并显示错误消息 新构建状态为 NUnit 错误 build status text 深入查看构建日志 我可以看到加载测试中的
  • Gradle 不包括 FXML 和图像

    我一直在寻找将 FXML 和图像包含在build gradle以便将它们构建到罐子中 我有看here https stackoverflow com questions 21128652 location is required in ja
  • 当我尝试运行 npx react-native run-android 时,任务:app:mergeDebugAssets 失败

    我正在使用 vscode 和物理 Android 设备在 React Native 上开发 Android 应用程序 在尝试使用 npx React Native Run Android 进行构建时 它不断显示以下错误 Task app m
  • C++ 构建系统 - 使用什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑用 C 启动一个新项目 最初是在我自己的时间 并且我正在研究可用的构建系统 答案似乎是 很多
  • ADT插件会自动创建ant构建文件吗?

    几个月前我创建了一个 Android 项目 现在必须使用 Hudson 自动化构建过程 Android 开发指南提到了一个 build xml 文件 该文件在生成项目时创建 http developer android com guide
  • Android Studio:编译器发生异常(1.8.0_242-release)

    运行应用程序时 无法完成编译 继续抛出错误 我安装了jdk并添加了java home路径 但仍然出现此错误 另外 当我写 flutter doctor v 时我没有任何问题 请通过 Java 错误报告页面 http bugreport ja
  • 外部 VS2013 构建错误“错误 MSB4019:找不到导入的项目 <路径>”

    我使用 CMake 文件从命令 proms 构建一个项目 该项目可以找到here http www adobe com devnet xmp html 在构建时我遇到以下错误 C Users User Desktop XMP Toolkit
  • Gradle:战争任务有冲突的包含/排除

    我正在尝试使用 Gradle 构建一个 war 文件 但遇到了一个问题 即排除一个目录并包含另一个恰好具有相同名称但父目录不同的目录 请注意 在下面的第一个代码示例中 两者都没有css 目录将包含在最终版本中war文件 我假设是因为 Gra
  • Ant 任务:使用排除参数

    得到以下 build xml 字符串
  • 除非我手动选择“重建”,否则 Visual Studio 2010 不会重建更改的代码

    在过去一周左右的时间里 我注意到 Visual Studio 2010 不会重新编译代码 除非我强制这样做 这是一个使用 WPF 的 C 4 0 项目 我按了 F5 如果代码已更改 它似乎使用了重建 然后启动应用程序 相反 它现在在左下角状
  • 构建和部署之间的区别?

    和有什么区别build and deploy and re deploy 当你只有一些时应该做什么HTML变化和没有Java代码改变 我应该做一个build and deploy或者只是一个re deploy 免责声明 定义构建和部署的含义
  • Unity构建错误

    所以我制作了我的游戏并尝试构建它 我收到一些对我来说毫无意义的错误 这是错误 UnityEditor BuildPlayerWindow BuildMethodException 2 个错误 在 UnityEditor BuildPlaye
  • 突然我无法为 iPhone 模拟器构建

    有时人们真的很讨厌苹果的开发环境 说真的 有必要这么复杂吗 我的问题是这样的 我无法再在模拟器上构建我的项目 我收到以下错误 我意识到这是一个链接器错误 我不明白的是 1 为什么它突然不再工作 2 它为什么不会选择正确的 SDK 这是链接器
  • 如何在Ant中添加相当于java -D的系统属性

    我需要设置java Djava library path some path我想在运行 ant 脚本 构建 jar 时执行此操作 我想我必须使用
  • Jenkins 多分支管道 - 在分支中配置属性?

    我们已经使用 Jenkins 多分支管道插件成功设置了构建管道 该插件在大多数情况下都运行良好 但是我们遇到了一个困扰我们的问题 Jenkinsfile包含一组属性 这些属性也显示在 UI 中 但如何为各个分支设置默认值 这就是我们的属性定
  • 如何向 SvelteKit/Vite 应用添加版本号?

    我正在尝试在我的 SvelteKit 应用程序中创建一个系统 它会在某个页面上向您显示有关当前应用程序版本的信息 最好是 Git 提交哈希和描述 我尝试使用Vite的定义功能 https vitejs dev config define在构
  • 使用 gradle 部署 GAE 时出现奇怪的构建失败

    直到今天一切都运转良好 据我所知 没有改变任何东西 现在我明白了 C mypath gt gradle appengineDeploy gt Configure project WARNING You are a using release
  • 什么是“制定目标”?

    为什么我需要制作一个make target在能够构建我的源代码之前 更具体地说 什么是制定目标 http publib boulder ibm com infocenter rsdvhelp v6r0m1 index jsp topic o
  • 颠覆和混合修订:破坏构建的秘诀?

    在使用 TFS 一段时间后 我刚刚回到 subversion 一般来说我已经很退出了 有一件事情我记得不一样 我不记得能够从过时的工作副本中提交 或者也许我的记忆力让我无法理解 过时 的定义 我认为 过时 意味着自从我上次更新工作副本以来
  • Maven 构建错误 TOOLS.JAR NOT FOUND IN JRE

    我在构建 Maven 项目时遇到这个问题 请帮我解决 ERROR Failed to execute goal org apache maven plugins maven compiler plugin 2 5 1 compile def

随机推荐

  • 自动装配两个实现相同接口的 bean - 如何将默认 bean 设置为自动装配?

    背景 我有一个 Spring 2 5 Java Tomcat 应用程序 有下面这个bean 在整个应用程序的很多地方都用到了它 public class HibernateDeviceDao implements DeviceDao 以及以
  • 函数内部的静态变量不能保存对单例的引用

    我注意到 PHP 中的单例有一个奇怪的行为 除了举一个例子之外 没有更好的方法来解释这一点 假设我有以下单例类 class Singleton protected function construct Deny direct instant
  • 这些是什么 ASCII 字符?

    我有两个字符需要在 php 字符串中进行搜索和替换 不知何故 这些不同于 有谁知道我可以使用什么函数从 php 字符串中删除这些内容 这就是当有人在 Outlook 中向您发送电子邮件时会发生的情况 因此请小心 因为您完全错过了这些单引号的
  • iOS copyWithZone 仅在使用设备时无法识别选择器

    我正在开发一个 iPad 应用程序 仅当 sqlite 数据库中有某些数据时才会启动初始屏幕 如下所示 if int MyStore sharedInstance mode lt 0 self connectionSettingsViewC
  • 为 ggplot - R 安排数据帧格式

    我想将数据从宽格式重塑为长格式 以便我可以使用 ggplot 来创建图表 我在正确排列数据时遇到一些问题 到目前为止 我从 27 个数据帧的列表开始我的流程 仅向您展示前 10 个数据帧 gt str NDVI stat List of 2
  • SyntaxError:Object.parse(本机)npm 请求输入意外结束

    您好 我不明白为什么会出现此错误 我认为收到数据后就会执行回调 知道这是从哪里来的吗 多谢 节点错误 SyntaxError Unexpected end of input at Object parse native 我解析主体的答案 然
  • SQL 代理:设置最大执行时间

    下午 我在 MS 2K8 BI 服务器上运行多个 SQL 代理作业 其中一些每天运行一次 其他每小时运行一次 每两分钟运行一次 另一个进程的心跳监视器 还有一个应用程序可以全天候每隔几分钟导入一次数据 有时 更新和报告的某些组合会发生冲突
  • 使用 Facebook sdk 发布嵌入的 YouTube 链接

    当您有意在 FB 上分享 YouTube 链接时 它会自动将 YouTube 播放器嵌入到您的墙上 如下所示 但是 当我尝试使用发布相同的视频时FB sdk HelloFacebookSampleActivity gt postStatus
  • 如何从 C# winform 应用程序检索屏幕分辨率?

    如何检索我的 C Winform 应用程序运行时的屏幕分辨率 您是否只需要标准应用程序使用的区域 即排除 Windows 任务栏和停靠窗口 如果是这样 请使用Screen WorkingArea 属性 否则 使用屏幕边界 如果有多个显示器
  • 嵌入式 Facebook Like-Box 不允许我设计它。为什么?

    我正在尝试在我的网站页面上放置一个 Facebook Like Box 然后通过我自己的 CSS 对其进行样式设置 主要是为了增加 div stream content 的高度 这个想法是让 FB feed 充当新闻 feed 但我不希望用
  • Rails 卷曲语法

    我可以从我的 Rails 应用程序运行以下命令 Hash from xml x curl d admin true http localhost 8888 rescue nil 现在我想用变量替换 admin true 如果我有 x adm
  • 为什么数组大小为 1 [重复]

    这个问题在这里已经有答案了 可能的重复 C 编程语言中数组的大小 我正在尝试编写一个函数 如果数组中有值则返回 1 这是代码 int inArrayInt int iVal int iArray int i int arrayL sizeo
  • 使用 Python BeautifulSoup 查找页数

    我想从 Steam 页面中提取总页码 本例中为 11 我相信以下代码应该可以工作 返回 11 但它返回一个空列表 就像如果没有找到一样paged items paging pagelink class import requests imp
  • 在自定义 JsonConverter 中,如何确定 Utf8JsonReader 数字标记是小数还是长整型?

    我有这个json转换器需要将给定的属性值转换为小数或长整型 具体取决于该值 但我似乎无法确定属性值何时为小数或长整型 因为 tokentype 只能检测数字 我该如何解决这个问题吗 public override IDictionary
  • 设置捆绑包的自定义视图控制器?

    我有一个带有设置视图的应用程序 可以从远程服务器动态加载设置 运行良好 我还想在 iPhone 设置中提供这些功能 但设置包似乎仅限于加载并保存到本地 NSUserDefaults 的简单键值 有没有办法为此指定自定义视图 设置包基于 pl
  • NSAttributedString,整体更改字体但保留所有其他属性?

    假设我有一个NSMutableAttributedString 该字符串有多种多样的mix整个格式化 这是一个例子 这个字符串是hell to change in iOS it really sucks 然而 字体本身并不是您想要的字体 我
  • 在 PHP 中使用 comet?

    我正在考虑使用 PHP 后端实现实时聊天 但我在讨论 comet 的网站上看到了这样的评论 我的理解是 PHP 是 彗星的语言很糟糕 因为 Comet 要求你保留一个 对每个人开放的持久连接 浏览器客户端 使用 mod php 这个 意味着
  • 如何定义描述内存位置的宏? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 变量位于内存地址 0x10000 处 如何定义一个宏 以便写入该宏会写入该内存位置 在 C 中声明可写内存位置的事实上的标准方法是这样的 define REGISTER vola
  • 如何获取客户端程序的本地TCP端口和IP地址?

    我正在准备一个简单的工作项目 并尝试熟悉 Unix 开发环境中套接字编程的基础知识 此时 我已经有了一些基本的服务器端代码和客户端代码设置来进行通信 目前 我的客户端代码成功连接到服务器代码 服务器代码向其发送测试消息 然后两者都退出 完美
  • 从 Repository() 编译的源代码未放入分层 SCons 项目的变体目录中

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