从现有 Makefile 创建 CMakeLists 文件

2024-02-28

我想用cmake为 C++ 项目生成构建文件。我有一个现有的Makefile。 我在生成这个时遇到问题Makefile使用标准cmake句法。

如何包含标准 C++ 库,例如-lstdc++ -lpthread -lboost_thread-mt in the TARGET_LINK_LIBRARIES的部分cmake?或者这些文件应该包含在ADD_DEPENDENCIES部分。

(或者) 有没有一个简单的工具可以生成CMakeList.txt文件来自Makefile


不幸的是,没有从 Makefile 到 CMakeList 的直接 1:1 转换。由于 CMake 应该在所有平台上运行,因此它不能像 GNU make 那样依赖于特定于平台的假设,这会使某些地方的事情变得复杂。

特别是,CMake 提供了一种非常强大且相当复杂的使用库的机制:您可以调用查找包 https://cmake.org/cmake/help/v2.8.8/cmake.html#command%3afind_package与您的库的名称,这将从您的 cmake 模块路径调用库搜索脚本。该脚本(也是用 CMake 编写的)将尝试检测库头文件和 lib 文件的位置,并将它们存储在几个 CMake 变量中,然后这些变量可以传递给相应的 CMake 命令,例如 include_directories 和 target_link_libraries。

这种方法有两个问题:首先,您需要一个搜索脚本。幸运的是,CMake 附带了 Pthreads、Boost 和其他几个的搜索脚本,但如果您使用的是更奇特的库,您可能必须自己编写搜索脚本,这在一开始是一种神秘的体验......

第二个主要问题是搜索脚本没有返回其结果的标准方法。虽然所使用的变量有命名约定,但这些约定通常不适用。实际上,这意味着您必须查看搜索脚本的源代码才能知道如何使用它。幸运的是,CMake 附带的脚本大多都有很好的文档记录。

内置脚本位于类似的位置<cmake-install-prefix>/share/cmake-2.8/Modules。对于您的问题,请查看 FindBoost.cmake 和 FindThreads.cmake 文件(CMake 应自动链接到标准库)。 Anycorn 已经提供了一些使用 Boost 脚本的示例代码,您需要了解的其他内容都在 CMake 文档中或直接在搜索脚本文件中。

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

从现有 Makefile 创建 CMakeLists 文件 的相关文章

随机推荐

  • 如何从颤振中的流式响应中获取响应? [复制]

    这个问题在这里已经有答案了 我正在使用 flutter 开发一个应用程序 并使用 http 库来调用我构建的 api 我想发出一个多部分请求来发送文件 它也发送它 但我无法从服务器收到任何响应 因为返回的对象是 StreamResponse
  • 如何查找违反引用完整性的记录

    我有两个表应该处于一对多关系 但表的多侧似乎有一些记录阻止创建关系 违反引用完整性 由于两个表中都有很多记录 是否有一种方法可以查询哪些记录位于多侧 而不是一侧 Ex Table 1 one side pk AccountId Table
  • Clojure STM ( dosync ) x Java 同步块

    Clojure STM dosync 方法和Java同步块有什么区别 我正在阅读 睡觉的理发师 问题中的以下代码 http www bestinclass dk index clj 2009 09 scala vs clojure roun
  • 如何在 Django 中使用新数据库重新开始?

    我删除了我的数据库 我想用一个新的数据库重新开始 我怎样才能做到这一点 我尝试创建一个新的数据源 但在应用迁移 或迁移时出现错误 无法找到表 这是真的 因为它是一个空数据库 当有人提取我的代码版本时 也会出现类似的情况 他不会有迁移或数据库
  • RMagick + Rails + Heroku?

    我想弄清楚如何在我的应用程序上使用 rmagick 然后使其在 Heroku 上运行 对于 Rails3 您必须添加此规范 gem rmagick 2 12 0 require gt RMagick 注意 要求区分大小写
  • 序言中的谓词

    我需要在 prolog 中定义一个谓词 它将一个列表作为输入 对 gt 5 的数字的平方求和 并减去 这就是我目前所拥有的 pred 0 pred Head Tail Result gr85 Head pred Tail Total Res
  • 使用 scan!() 读取 u8 时出现“宏未定义”

    我读到有关读取整数输入的内容如何在 Rust 1 0 中读取用户输入的整数 https stackoverflow com questions 30355185 how to read an integer input from the u
  • 使用 Nuxt.js 进行开发和生产的不同 baseURL

    如何为开发和生产添加不同的baseURL 这是目前我的 nuxt config js module exports mode universal axios See https github com nuxt community axios
  • 为什么 Karma 配置文件排除选项不起作用?

    我的示例 Angular 应用程序中有两个规范文件 规格文件名称是src app app component spec ts src app app component two spec ts 我只想运行文件中的测试src app app
  • Sidekiq - 重新安排失败的作业

    我有一个后台工作 使用 Sidekiq 连接到我的另一个服务 如下所示 def perform id user ABCClient instance user id end 有时这个 ABCClient 会宕机 在这种情况下我想重新安排 执
  • 如何使用 Django-oauth-toolkit 进行身份验证,通过 Django-rest-framework 测试 API 端点

    我有一个 Django rest framework 视图集 路由器来定义 API 端点 视图集定义如下 class DocumentViewSet viewsets ModelViewSet permission classes perm
  • 如何检查 MongoDB 中的数组字段是否包含唯一值或另一个数组?

    我现在用的是mongodb 我有一个博客文章集 它有一个tags字段是一个数组 例如 blogpost1 tags tag1 tag2 tag3 tag4 tag5 blogpost2 tags tag2 tag3 blogpost3 ta
  • Android / 9-patch PNG:如果我需要像 11-patch PNG 这样的东西怎么办?

    在 Draw 9 patch 中 一切看起来都很好 However 我的 SDK 说 9 patch png 格式错误 因为我有类似 11 patch png 的东西 因为我不希望小抓取区域被缩放 如何让它发挥作用 截图描述了一切 控制台中
  • NodeJs:缓慢的 req.pipe

    我发现 tus 的服务器实现 https tus io https tus io 对于nodejs https github com tus tus node server https github com tus tus node ser
  • gevent 和 posgres:异步连接失败

    我正在使用 gevent 处理基于 Django 的 Web 系统上的 API I O 我已经使用以下方法进行了猴子补丁 import gevent monkey gevent monkey patch socket 我已经使用以下方法修补
  • Web、应用程序和移动编程之间的主要技术区别是什么?

    我想知道Web ASP PHP Ruby等 之间的主要技术区别是什么 应用程序 C C NET Java 和移动 J2ME Objective C 编程 这是最难的 如果有人学会了其中之一 他可以轻松地切换到其他之一吗 首先 从一个技术的从
  • Android 共享图片不起作用

    我正在尝试使用以下代码共享应用程序的屏幕截图 View content findViewById R id layoutHome content setDrawingCacheEnabled true Bitmap bitmap conte
  • Plotly Dash 中心 dcc.输入文本字段

    我在弄清楚居中需要哪些样式参数时遇到了很多困难dash core components Input我的页面中间的文本字段 import dash import dash core components as dcc import dash
  • NSNumberFormatter 不允许输入十进制数字

    我对 NSNumberFormatter 的使用感到非常困惑 这应该非常简单 但我无法让它工作 我想设置一个 NSTextField 以允许输入带小数点或不带小数点的十进制数字 这是我认为可行的 NSNumberFormatter form
  • 从现有 Makefile 创建 CMakeLists 文件

    我想用cmake为 C 项目生成构建文件 我有一个现有的Makefile 我在生成这个时遇到问题Makefile使用标准cmake句法 如何包含标准 C 库 例如 lstdc lpthread lboost thread mt in the