CMake:管理源文件列表

2024-03-14

我目前遇到的问题是,我只是希望通过抓取所有内容并删除一些我不需要的零碎内容来管理我的源文件列表。我希望 Cmake 为此提供很好的内置工具。

所以我可能会从以下开始:

file(GLOB A "Application/*.cpp")

我觉得我想创建另一个要删除的文件列表,并且我想告诉 CMake:从列表 A 中删除列表 B 中的项目。

如果这是 Python 我可能会这样做:

C = [f for f in A if f not in B]

我可能搞砸了该语法,但我想知道是否有内置支持以更优雅的方式管理这些文件列表?

即使我可以做像我的 Python 示例那样的事情,A 是绝对路径列表,因此构建 B 很笨拙。

为什么绝对路径呢?一旦您重新定位源,这似乎就会破坏您的构建。


您可以通过使用来做到这一点列表命令 http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:list使用 REMOVE_ITEM 选项:

list(REMOVE_ITEM <list> <value> [<value> ...])

看一看:

file(GLOB FOO *)
set (ITEMS_TO_REMOVE "item;item2;item3")
message(STATUS "FOO is ${FOO}")
list(REMOVE_ITEM FOO ${ITEMS_TO_REMOVE})
message(STATUS "FOO is now ${FOO}")

请记住,返回的路径file(GLOB)是绝对的,您可能希望通过添加前缀来构建要删除的项目列表${CMAKE_CURRENT_LIST_DIR}对他们每一位:

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

CMake:管理源文件列表 的相关文章

随机推荐

  • Windows 通知服务:尝试在 PHP 中创建 Toast 通知时出现 401 无效令牌

    我一直在尝试向模拟器发送 Toast 通知 我创建了 Windows Phone 8 1 应用程序并将其与商店中的应用程序关联 之后 我设法获取了必须用来调用通道 URI 的访问令牌 当我尝试使用通道 URI 和访问令牌发送 Toast 通
  • XSD 验证错误:找不到元素“soapenv:Envelope”的声明

    我尝试使用以下命令根据 XSD 验证我的 XMLhttp www freeformatter com xml validator xsd html http www freeformatter com xml validator xsd h
  • rgdal 不会安装在 AWS RStudio AMI 上

    我已成功启动最新的 RStudio AWS EC2 实例 louisaslett com RStudio 1 1383 R 3 4 2 ubuntu 16 04 LTS 64 在这种情况下 R 的运行基本符合预期 我可以安装和打开许多软件包
  • Delphi 视觉组件 - 远离 TFrame 基础? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我应该如何在 Scala 和 Anorm 中使用 MayErr[IntegrityConstraintViolation,Int]?

    I use Anorm http scala playframework org documentation scala 0 9 1 anorm进行数据库查询 当我做一个executeUpdate 我应该如何进行正确的错误处理 它有返回类型
  • 伪代码归纳证明

    我不太明白如何在伪代码上使用归纳证明 它的工作方式似乎与在数学方程上使用它的方式不同 我正在尝试计算数组中可被 k 整除的整数的数量 Algorithm divisibleByK a k Input array a of n size nu
  • Python按顺序执行线程

    我有以下代码 导入线程 def send to server lst Some logic to send the list to the server while 1 lst for i in range 1000 lst append
  • Ruby 和 MySQL UTF-8 字符

    我正在切换一个Sinatra http www sinatrarb com从 SQLite3 到 MySQL 的应用程序 由于某种我无法理解的原因 当我使用 Ruby 从 MySQL 中提取数据时Sequel https rubygems
  • Angular-CLI 和 Bootstrap 4

    我使用 Angular 2 迈出了第一步 特别是我使用 Angular cli 官方工具来创建新项目 我以这种方式创建了一个新项目 ng new my project name 该项目已正确创建 之后我想安装 bootstrap 4 并按照
  • 反应流中的自定义节点;创建节点后将附加数据保存到节点

    这是我第一次介绍反应流 我希望创建一个自定义节点 创建后 用户可以在节点中输入信息并保存 显示它 从反应流自定义节点的文档 https reactflow dev docs guides custom nodes 他们有一个类似的例子 他们
  • Android Studio 中外部剥离共享库的本机调试

    我已经剥离和未剥离共享库 如何在使用 LLDB 在 Android Studio 中调试剥离时加载符号 我可以成功调试位于 jniLibs 文件夹中的完整未剥离的 so 但它太大了 部署时间太长 在调试配置中指定符号目录不适用于标准和实验性
  • 在android中实现Socket.io的最佳方式

    我计划通过以下方式在 android 中实现 Socket iothis https github com socketio socket io 基于聊天的应用程序的库 据我了解 图书馆似乎相当不错 我想知道如何维护single整个应用程序
  • 新的 PendingIntent 更新当前意图

    我试图在一段时间间隔后显示不同的通知 但发生的情况是它更新了当前的通知PendingIntent结果 即使我触发 4 5 个待处理的意图请求 我也只能收到一个通知 单击按钮后我会执行以下操作 try adapter OpenDB int i
  • 反复出现的成本难题

    我经常发现自己必须定义一个函数的两个版本 以便拥有一个 const 版本和一个非常量版本 通常是 getter 但并非总是如此 两者的区别仅在于 其中一个的输入和输出是常量 而另一个的输入和输出是非常量 该功能的核心 真正的工作 是相同的
  • 跨线程共享具有特征对象的结构作为属性

    我有下面的代码 有了注释掉的部分 它就可以工作了 当我取消注释这些部分时 它不再编译 如何调整注释部分以使它们工作 即我想让线程同时访问表达式树 当我尝试时 编译器会开始出现有关线程安全的错误 我阅读了 Rust 书籍并了解 C C 但还不
  • 如何在scrapy中获取原始start_url(重定向之前)

    我正在使用 Scrapy 来抓取一些页面 我从 Excel 工作表中获取 start urls 并且需要将 url 保存在项目中 class abc Spider BaseSpider name abc allowed domains ab
  • 如果用户登录,Angular 6 会更改组件

    使用基于 JWT 的实现和 Angular 6 根据用户是否登录隐藏 显示组件的最佳方法是什么 如果有一个包含用户相关信息的 Observable 用户对象就好了 这个需要守卫吗 后端使用 NET Core 2 1 不确定这是否有什么区别
  • 使用实体框架将自定义字符串作为主键

    我正在尝试使用 Code First 实体框架将个性化字符串设置为主键 我有一个助手 它的函数返回一个 n 个字符的随机字符串 我想用它来定义我的 Id 就像 YouTube 视频代码一样 using System Security Cry
  • 调用失败,参数为空

    我有以下代码 public static ContactEventValue GetContactEventValue ContactEventType contactEventType string programCode string
  • CMake:管理源文件列表

    我目前遇到的问题是 我只是希望通过抓取所有内容并删除一些我不需要的零碎内容来管理我的源文件列表 我希望 Cmake 为此提供很好的内置工具 所以我可能会从以下开始 file GLOB A Application cpp 我觉得我想创建另一个