当前位置: 首页 > 知识库问答 >
问题:

制作或制作。我两者都需要吗?

柯梓
2023-03-14

新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含Makefiles和CmakeList。txt。我正在建设一个类似的项目,涉及外部图书馆。有必要同时学习CMake和make吗。还是说CMake就足够了?

共有3个答案

郗奇玮
2023-03-14

Cmake是一个元构建系统

使用cmakeCMakeLists中的设置。CMake将生成目标平台的构建文件。可能是Makefiles、Visual Studio解决方案、忍者文件、KDevelop项目文件。。。

如果项目被设置为使用Cmake,您甚至不需要查看生成的构建文件(Makefiles)。它们完全是暂时的。

马朝斑
2023-03-14

CMake是一个Makefile(和其他项目文件)生成器。你不需要学习make,除非你要与CMake本身挂钩。

然而,一些经典的make知识仍然有用,例如:

  • 为并行传递-j标志
  • 使V=1为冗长的输出
  • 使清洁用于清洁
  • 让安装和DESTDIR参数
吴同
2023-03-14

无需学习编写makefile,因为CMake是一个抽象层或“meta make”,为您生成makefile。作为任何抽象层,你只需要学习使用它的功能。但你也需要了解它是为什么而开发的。在这种情况下,例如什么是构建工具?或者什么是原生构建环境?

但cmake——与ctest、cpack和cdash相结合——远不止于此,它(主要)消除了学习编译器/链接器开关、平台/框架处理库/可执行文件及其安装等的需要。

  • 交叉编译
    • 它支持CMake生成器中总结的许多不同的构建环境输出格式
    • 例如,它会在CMake编译功能中抽象特定的编译器开关
    • 它确实适用于各种不同设置的操作系统(在CMake的下载页面上进行了总结)
    • 它与许多IDE或编辑器(如Visual Studio或CLion)配合使用或直接集成到这些IDE或编辑器中
    • 它可以交叉编译到特定的目标平台,如CMake工具链中总结的Android
    • 它主要支持C/C,但也支持Asm、RC、Fortran和CMake版本3.8 C #
    • 它确实不需要学习其他脚本语言(通常用于执行构建前或构建后的步骤),因为它嵌入了一个中等大小的脚本语言

    根据我在项目中使用CMake的经验:

    >

  • 缺点是:您需要在所有目标环境中对其进行测试(不可否认,这对于Cmake来说并不具体)。在封闭的环境中(例如在公司内部),维护相对容易,但在开源环境中,总会有一个或另一个先例,您需要稍微调整一下Cmake脚本。

    优点:CMake在C/C项目中得到了广泛的应用/支持,作为您项目的潜在用户,我可以选择使用我的构建环境并选择工具(例如,我在我的项目中将make替换为ninja)。

    参考文献

    • C构建系统-使用什么
    • C构建系统

 类似资料:
  • 大家好,我正在努力将一个简单的avro模式与模式注册表一起序列化。 设置: 两个用java编写的Flink jobs(一个消费者,一个生产者) 目标:生产者应该发送一条用ConfluentRegistryAvroSerializationSchema序列化的消息,其中包括更新和验证模式。 然后,使用者应将消息反序列化为具有接收到的模式的对象。使用。 到目前为止还不错:如果我将架构注册表上的主题配置

  • 问题内容: 我需要知道AngularJS是否用作前端的js框架,模板引擎是否需要单独的Handlebars?…就像我认为的那样,模板引擎功能可以使用AngularJS本身完成! 问题答案: 没错,把手和Angular在一起将毫无用处。 把手和Angular是完全不同的东西。 车把是一个模板引擎。您编写一个奇特的templatey- string,为其提供一个JSON对象,并从数据中渲染HTML。没

  • 我有几个存储库来处理实体(添加、更新、删除等)。).我想使用JpaRepository只通过@Queries方法获取统计数据,而不使用update、delete和其他CRUD方法。在spring JPA中有针对这种情况的解决方案吗?如果我使用JpaRepository

  • 我可以从我的机器发送一个RTSP视频流到亚马逊Kinesis视频流。我想知道是否有可能从一个边缘设备发送多个RTSP视频流(多个生产者)?目前我关注的文档是https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-gstreamer-plugin.html#examples-gstreamer-plugin-docker。

  • 问题内容: 当要使用“ ”方法引用网页的某个部分时,应使用 要么 它们都起作用,但是它们是相等的还是语义上的差异? 问题答案: 根据HTML5规范5.9.8导航到片段标识符: 对于HTML文档(和text / html MIME类型),必须遵循以下处理模型来确定文档的指示部分是什么。 解析URL,并让fragid作为URL的 组件。 如果fragid是空字符串,则文档的指示部分是文档的顶部。 如果

  • 在. java 我得到了 1.8.0_45 但是当我把它打包成一个jar包并在另一个项目中使用时,它告诉我 为什么? 在cmd中 C:\用户\想法 Java版本"1.8.0_45" Java(TM)SE运行时环境(build 1.8.0_45-b15) JavaHotSpot(TM)64位服务器VM(构建25.45-b02,混合模式)