新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含Makefiles和CmakeList。txt。我正在建设一个类似的项目,涉及外部图书馆。有必要同时学习CMake和make吗。还是说CMake就足够了?
Cmake是一个元构建系统。
使用cmake
和CMakeLists中的设置。CMake将生成目标平台的构建文件。可能是Makefiles、Visual Studio解决方案、忍者文件、KDevelop项目文件。。。
如果项目被设置为使用Cmake,您甚至不需要查看生成的构建文件(Makefiles)。它们完全是暂时的。
CMake是一个Makefile(和其他项目文件)生成器。你不需要学习make,除非你要与CMake本身挂钩。
然而,一些经典的make
知识仍然有用,例如:
-j
标志使V=1
为冗长的输出使清洁
用于清洁无需学习编写makefile
,因为CMake是一个抽象层或“meta make”,为您生成makefile。作为任何抽象层,你只需要学习使用它的功能。但你也需要了解它是为什么而开发的。在这种情况下,例如什么是构建工具?或者什么是原生构建环境?
但cmake——与ctest、cpack和cdash相结合——远不止于此,它(主要)消除了学习编译器/链接器开关、平台/框架处理库/可执行文件及其安装等的需要。
根据我在项目中使用CMake的经验:
>
缺点是:您需要在所有目标环境中对其进行测试(不可否认,这对于Cmake来说并不具体)。在封闭的环境中(例如在公司内部),维护相对容易,但在开源环境中,总会有一个或另一个先例,您需要稍微调整一下Cmake脚本。
优点:CMake在C/C项目中得到了广泛的应用/支持,作为您项目的潜在用户,我可以选择使用我的构建环境并选择工具(例如,我在我的项目中将make
替换为ninja
)。
参考文献
大家好,我正在努力将一个简单的avro模式与模式注册表一起序列化。 设置: 两个用java编写的Flink jobs(一个消费者,一个生产者) 目标:生产者应该发送一条用ConfluentRegistryAvroSerializationSchema序列化的消息,其中包括更新和验证模式。 然后,使用者应将消息反序列化为具有接收到的模式的对象。使用。 到目前为止还不错:如果我将架构注册表上的主题配置
问题内容: 我需要知道AngularJS是否用作前端的js框架,模板引擎是否需要单独的Handlebars?…就像我认为的那样,模板引擎功能可以使用AngularJS本身完成! 问题答案: 没错,把手和Angular在一起将毫无用处。 把手和Angular是完全不同的东西。 车把是一个模板引擎。您编写一个奇特的templatey- string,为其提供一个JSON对象,并从数据中渲染HTML。没
我有几个存储库来处理实体(添加、更新、删除等)。).我想使用JpaRepository只通过@Queries方法获取统计数据,而不使用update、delete和其他CRUD方法。在spring JPA中有针对这种情况的解决方案吗?如果我使用JpaRepository
问题内容: 当要使用“ ”方法引用网页的某个部分时,应使用 要么 它们都起作用,但是它们是相等的还是语义上的差异? 问题答案: 根据HTML5规范5.9.8导航到片段标识符: 对于HTML文档(和text / html MIME类型),必须遵循以下处理模型来确定文档的指示部分是什么。 解析URL,并让fragid作为URL的 组件。 如果fragid是空字符串,则文档的指示部分是文档的顶部。 如果
我可以从我的机器发送一个RTSP视频流到亚马逊Kinesis视频流。我想知道是否有可能从一个边缘设备发送多个RTSP视频流(多个生产者)?目前我关注的文档是https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-gstreamer-plugin.html#examples-gstreamer-plugin-docker。
在. 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,混合模式)