依赖于子目录同级的介子目标

2023-11-21

这是我的项目结构:

.
├── include
├── src
│   ├── abc
│   │   ├── include
│   │   └── src
│   ├── def
│   │   ├── include
│   │   └── src
│   └── ghi
│       ├── include
│       └── src
└── vendor
    ├── bar
    │   ├── include
    │   └── src
    └── foo

16 directories

我想将我的构建移植到 Meson。但是,我不确定如何链接同级文件夹中定义的目标。

我的依赖图如下所示:

  • src/abc/meson.build定义静态库abc
  • src/def/meson.build定义静态库def这取决于abc and foo
  • src/ghi/meson.build定义静态库ghi这取决于bar
  • vendor/bar/meson.build定义静态库bar
  • vendor/foo/meson.build定义静态库foo
  • 顶层meson.build定义一个可执行文件app这取决于abc, def and ghi

在文档中,似乎有两种机制:

  • subdir
  • subproject

我不清楚这里哪个最好。我的源代码之外没有任何依赖项。

我应该在我的meson.build文件将这些目标链接在一起?


除了@sdgfsdh的(正确)答案之外,我喜欢的另一种方法是仅在顶级介子文件中定义库和可执行文件,并使用 subdir 调用来定义一组源文件和“本地”包含路径。通过这种方式,子目录文件不会隐式地相互依赖;整个依赖树位于顶级介子文件中。

这种方法的优点是:

  • 子目录不需要知道它们自己的路径(files() 和 include_directories() 将为您跟踪它)
  • 顶层文件只需要知道子目录路径即可调用子目录介子文件。之后,您可以根据子目录中创建的变量来定义所有内容
  • subdir 文件不直接依赖于任何其他介子文件

缺点:

  • 顶层文件比较混乱
  • 子目录文件中的变量名称需要全局唯一,因为所有内容最终都是在顶级范围中定义的

您的案例的一个例子:

# Top-level meson.build
subdir('src/abc')
subdir('src/def')
subdir('src/ghi')
subdir('vendor/foo')
subdir('vendor/bar')

libabc = static_library('abc', abc_files, include_directories: abc_includes)

libabc_dep = declare_dependency(include_directories: abc_includes, link_with : libabc)

libfoo = static_library('foo', foo_files, include_directories: foo_includes)

libfoo_dep = declare_dependency(include_directories: foo_includes, link_with : libfoo)

libdef = library('def', def_files, include_directories: def_includes, dependencies : [ libabc_dep, libfoo_dep])
# src/abc/meson.build (others would be similar)
abc_files = files(['1.c','2.c',...])
abc_includes = include_directories('include')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

依赖于子目录同级的介子目标 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表
  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • Selenium 如何点击 50% 在屏幕上和 50% 不在屏幕上的元素?

    有一个 div 元素 其大小的 50 在屏幕上 另外 50 超出屏幕高度并且不可见 无法滚动 我尝试使用 Selenium 进行自动化测试并单击该 div 元素 但有时它有效 有时则无效 为什么 Selenium 不直接点击该 div 的
  • NHIbernate OR 标准查询

    我有以下映射类 Trade ID AccountFrom AccountTo Account ID Company Company ID 现在我无法找到一种方法来选择所有交易 AccountFrom Company ID X OR Acco
  • 我应该使用 django-gunicorn 集成还是 wsgi?

    我正在使用gunicorn django 设置一个网络服务器 有两种部署选项 使用常规 WSGI 或使用gunicorn 的 django 集成 我很想使用后者 因为它简化了配置 但是Django 文档说 If you are using
  • PhoneGap Eclipse 问题 - eglCodecCommon glUtilsParamSize:未知参数错误

    我刚刚开始使用phonegap 并尝试在eclipse 中设置第一个基本的最小项目 我按照以下位置的phonegap文档进行操作http docs phonegap com en edge guide platforms android i
  • MySQL InnoDB 不同数据库之间的外键

    我想知道在 InnoDB 中是否可以MySQL有一个table with 外键引用不同的另一个表database 如果是这样 如何做到这一点 我没有看到任何限制https dev mysql com doc refman 8 0 en cr
  • Django-Celery 正在生产中吗?

    所以我一直在试图弄清楚如何制定计划任务 我找到了 Celery 并且能够制定简单的计划任务 为此 我需要打开命令行并运行celery A proj beat为了任务的发生 这在开发环境中工作得很好 但是当将其投入生产时 这将是一个问题 那么
  • 从 64 位整数秒计数创建 boost::posix_time::ptime 对象

    我有一个 32 位 Linux 系统 在其中我必须记录时间戳为距 1901 01 01 00 00 00 的 UINT32 秒偏移量的数据 计算时间戳对我来说没问题 因为我可以使用 64 位ticks 计数器和ticks per secon
  • 使用 matplotlib 添加自定义刻度

    我想在matplotlib数字 目前 我使用以下命令添加刻度 例如 axis set yticks 0 5 0 6 0 7 0 8 0 9 1 0 我希望能够做到 axis set yticks 1 0 some custom text 所
  • Grails 2.x createCriteria 'or' 不适用于嵌套关联

    似乎在 Grails 2 x 中 如果您有一个域类关联 并且您尝试使用以下命令运行 createCriteriaor在该关系 另一个查询上 or将忽略其他查询并仅使用嵌套关联的结果 我意识到这可能有点令人困惑 所以这里是一个例子 class
  • SQLite更新触发器更改表中的所有行

    问题 最简单的更新触发器将新值写入所有表行 而不仅仅是正在更新的行 这是表格 names id INTEGER PRIMARY KEY name TEXT len INTEGER 现在我想创建触发器来用 name 的长度更新 len 这个
  • Selenium Webdriver:元素不可见异常

    这是我的代码 用于单击一个简单的登录按钮Website import java util concurrent TimeUnit import org openqa selenium By import org openqa seleniu
  • UIAccessibility 元素的自定义 UITableViewCell 问题

    无论我尝试什么 我都无法阻止我的自定义 UITableViewCell 发挥作用就像应该的那样根据 UIAccessiblity 的默认规则 我不希望这个单元格充当可访问性容器 本身 所以遵循这个guide我应该能够使我的所有子视图都可访问
  • 宽度和高度会随方向变化吗?

    所以我的游戏从垂直方向开始 然后最终进入水平方向 我知道屏幕的宽度是屏幕的宽度 与垂直方向时的高度相同 当它切换到水平方向时 高度会变成宽度 宽度会变成高度吗 或者它们保持不变 是的 屏幕宽度和高度会根据设备方向而变化 您可以使用以下命令获
  • 如何在 C# 中将 UTC 时间转换为任何其他时区的时间

    我正在 C net 中工作 Net fx 是 2 0 不支持不同时区之间的转换 我已经编写了一个基于 UTC 的调度程序 但它在伦敦的 DTS 周期中给出了 1 小时的错误 我需要一些解决方案 以便我可以通过正确的 DST 调整来获得相对于
  • 将 int 转换为 4 字节 char 数组 (C)

    嘿 我希望将用户输入的 int 转换为 4 个字节 并将其分配给字符数组 如何才能做到这一点 Example 将用户输入 175 转换为 00000000 00000000 00000000 10101111 到目前为止所有答案都有问题 转
  • 查看单个文档中单个字段的原始 Solr 标记

    我正在调试我的 Solr 架构 我想查看标记特定字段的结果 举一个简化的例子 如果我有
  • sudo E选项不起作用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 在我看来 如果我写一个shell脚本 HOME path to script myscript and export PATH PATH HOME path to script th
  • 在单活动架构中设置片段的横向方向

    如何实现只锁定一个屏幕方向Fragment 在单活动架构中 只有一个Activity对于整个应用程序 有没有比在每个中指定请求的方向更好的解决方案Fragment 我试图避免放置activity requestedOrientation A
  • 在 scrapy 中运行多个蜘蛛

    例如 在 scrapy 中 如果我有两个包含不同 HTML 的 URL 现在我想分别编写两个单独的蜘蛛 并希望同时运行这两个蜘蛛 在 scrapy 中可以同时运行多个蜘蛛 在scrapy中编写多个蜘蛛后 我们如何安排它们每6小时运行一次 可
  • 依赖于子目录同级的介子目标

    这是我的项目结构 include src abc include src def include src ghi include src vendor bar include src foo 16 directories 我想将我的构建移植