我觉得针对这个问题最简单(但不是最正确的)的回答应该是:“CMake是服务于将源代111码转换成可执行的文件的工具”。
命令可以带字符串参数,但没有返回值。命令名是大小写不敏感的,所以SET和set表示同一个命令,但是命令带的参数名是大小写敏感的ARG和arg是两个不同的参数。
在CMake中定义和使用变量时,可以使用引号也可以不使用引号,并且它们会产生不同的结果。
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51282749
CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单。
cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。
Android Studio 从 2.2 版本起开始支持 CMake ,可以通过 CMake 和 NDK 将 C/C++ 代码编译成底层的库,然后再配合 Gradle 的编译将库打包到 APK 中。
CMake 是什么我就不用再多说什么了,相信大家都有接触才会看一篇文章。对于不太熟悉的开发人员可以把这篇文章当个查找手册。
CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装编译过程。
打造顶级软件并非易事。开发者在网上研究这一主题时,常常遇到的问题是如何判断哪些建议是更新的,哪些方法已经被更 fresh、更好的实践所超越。与此同时,大多数资源对这个过程的解释是混乱的,没有适当的背景、上下文和结构。
最近在学习 Linux 下的 C+ 开发的编译知识,总结出该系列笔记,这是第五篇,可以通过以下链接阅读之前的笔记:
本文主要介绍了在CMakeLists.txt中指定使用静态库/MT还是动态库/MD,以及如何在MSVC的环境下编译C/C++项目。通过在CMakeLists.txt中设置CMAKE_C_FLAGS、CMAKE_CXX_FLAGS变量,可以控制编译器使用静态库还是动态库。同时,通过使用CMAKE_USER_MAKE_RULES_OVERRIDE变量,可以在外部控制/MD和/MT选项,避免在多个项目之间重复设置CMakeLists.txt。
由于macOS下的应用程序结构导致了CEF这样的多进程架构程序在项目结构、运行架构上有很多细节需要关注,这一块的内容比起Windows要复杂的多,所以本文将会聚焦macOS下基于CEF的多进程应用架构的环境配置,并逐一说明了CMake的相关用法和CEF应用配置细节。
对于大多数项目,源代码是通过版本控制系统进行跟踪的;它通常作为构建系统的输入,构建系统将其转换为对象、库和可执行文件。在某些情况下,我们使用构建系统在配置或构建步骤中生成源代码。这可以用于根据在配置步骤中收集的信息来微调源代码,或者自动化原本容易出错的重复代码的机械生成。生成源代码的另一个常见用例是记录配置或编译信息以确保可复现性。在本章中,我们将展示使用 CMake 提供的强大工具生成源代码的各种策略。
本文对CMake中库的打包,安装,导出以及支持find_package,使其能够很简单的应用到其他的项目中进行详细的总结。
CMake 可能已经安装在你的 Linux 系统上。如果没有,你可以使用发行版的程序包管理器进行安装:
距离笔者的《使用CEF》系列的第一篇文章居然已经过去两年了,在这么长一段时间里,笔者也写了很多其它的文章,再回看《使用CEF(一)— 起步》编写的内容,文笔稚嫩,内容单薄是显而易见的(主要是教大家按部就班的编译libcef_dll_wrapper库文件)。笔者一直以来的个性就是希望自己学习到的知识,研究出的内容,踩过的坑能够及时的写出来,介绍给更多的小伙伴。
CMake 详细说明参考官方文档 https://cmake.org/cmake/help/latest/index.html,其中latest为最新版本版本,不同 CMake 版本,API 有差异,请根据当前项目设置的最低版本来参考,高版本 API 在低版本无法使用。3.20之后的文档会标记该 API 的生效版本
至于 CLion 安装和基础设置,网上教程一大把,而且不是学习重点,根据自己需求配置即可。
交叉编译算是每个嵌入式开发者都会经历的一道坎吧,通俗的描述就是搭建Arm板代码编译环境,让代码能够在Arm板子上跑起来。常用到的编译工具为Makefile和CMake,本篇记录下CMake的常用技巧。
项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码结构和组织是分开的,因此为了两边能够同步维护,需要一个能够跨平台的项目编译解决方案,经过调研之后,选择了使用cmake这个工具,本文主要讲述,使用cmake的生产项目的一些基础知识。
上一篇博客《conan入门(十六):profile template功能实现不同平台下profile的统一》以Android NDK交叉编译为例介绍了jinja模板在conan profile中的应用。如果针对不同的Android目标平台(armv7,armv8,x86,x86_64)都要维护一个profile也是挺麻烦的。本文在此基础上,更进一步改进将android NDK 对不同平台armv7,armv8,x86,x86_64交叉编译的profile基本于同一个模板统一实现
CMake是一个跨平台的建构系统的工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的构建文档makefile或者project文件,描述系统建构的过程。还能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。CMake并不直接建构出最终的软件,而是产生标准的建构档(如 Unix的 Makefile或 Windows Visual C++的 projects/workspaces),然后再依一般的构建方式使用。
CMake 工具能够自动生成 Makefile 文件,减轻手写 Makefile 文件的工作量,同时减少书写 Makefile 文件产生的错误。
当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了—–CMake!
CMake 是一个跨平台的自动化建构系统,可以用简单的命令来控制软件编译过程。下面是一个关于如何使用 CMake 进行项目配置和编译的教程。
在使用CMake构建C++项目时,有时可能会遇到以下错误信息:Unknown CMake command "add_compile_definitions"。这个错误提示表明在CMakeLists.txt文件中使用了一个未知的CMake命令add_compile_definitions。
在本书的最后一章中,我们将结合前面章节中讨论的多个不同的构建块,并将其应用于一个实际项目。我们的目标将是逐步展示如何将一个非平凡的项目移植到 CMake,并讨论这样的过程中的步骤。我们将为移植您自己的项目或为遗留代码添加 CMake 支持提供建议,无论是来自 Autotools,来自手工编写的配置脚本和 Makefile,还是来自 Visual Studio 项目文件。
AzureRTOS 提供了针对不同处理器的接口文件,这些文件可以无需任何修改的情况下移植到目标系统。
首先感谢那位叫“任麒麟”的网友整理的PDF,有心了。 我也忘了哪里下载的,不过确实挺全的。
CMake是一个主要用于CPP的构建工具。CMake语言是平台无关的中间编译工具。同一个CMake编译规则在不同系统平台构建出不同的可执行构建文件。在Linux产生MakeFile,在Windows平台产生Visual Studio工程等。CMake旨在解决各平台的不同Make工具的产生的差异(比如GNU Make, QT的qmake,微软的nmake, BSD的pmake)。
CMake 允许为项目增加编译选项,从而可以根据用户的环境和需求选择最合适的编译方案。
Keil MDK是非常常用的单片机开发集成环境,Keil公司2005年由ARM公司收购,现在是ARM主要的嵌入系统开发平台(ARM的另一个开发环境ds-5早在九年前就停止更新了)。 Keil虽然是个集成开发环境,但Keil本身其实是由μVision IDE和arm编译器构成。cmake虽然目前不支持生成μVision的工程文件,但cmake完全可以使用MDK中提供的arm编译器来实现独立于μVision的交叉编译(说到底μVision只是一个为开发者提供易用的GUI界面,真正干活儿的还是编译器)。 cmake实现交叉编译最重要的就是正确的定义编译工具链(toolchain),本文以Nationstech.N32G45X(国民技术)平台为例说明如何在定义cmake交叉编译工具链来实现使用MDK的armcc编译器执行单片系统的交叉编译。
理论上来说,任意一个c++程序都可以使用g++来编译,但当程序规模越来越大时,一个工程可能有许多的文件夹和源文件,这时输入的编译命令将会越来越长。因此,对于C++使用一些工程管理工具会更加高效。这里我们使用CMake。 在一个CMake工程中,我们会使用cmake命令生成一个Makefile文件,然后,用make命令根据这个 makefile文件的内容来编译整个工程。
本篇文章主要描述CMake的基本用法。在之前的文件中我对Makefile,Autotools这两个构建工具。相关文章如下:
有了Cmake以后,只需要编写一个CmakeLists文件就可以对应将一个C++工程不通操作系统
C++ 编译与构建工具主要用于将 C++ 源代码转换为可执行程序。它们可以分为以下几类:
CMake中变量的类型有多种:通过set设置的普通变量和缓存变量、环境变量、数组变量等等,由于CMake在生成的过程中会加载缓存的关系,因此用法不一样。
我们编译生成的可执行文件一般,会生成在当前的编译路径下,也就是build或者release路径下。那么如何将编译生成的可执行文件和库文件打包到一起进行发布那?本片教程我们将讲述如何在cmake中配置install的打包路径。下面我们将以mathlib库和头文件为例子进行配置。
将CMakeLists.txt文件划分为多个模块化的文件可以使项目结构更清晰、易于维护。每个模块都应该负责特定的任务,例如编译源文件或链接库。这样可以将构建过程分解成小的、易于管理的部分。您可以根据自己的项目需求,将CMakeLists.txt文件划分为几个不同的模块,每个模块负责一个不同的功能。
示例源码 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:
尽管 CMake 是跨平台的,在我们的项目中我们努力使源代码能够在不同平台、操作系统和编译器之间移植,但有时源代码并不完全可移植;例如,当使用依赖于供应商的扩展时,我们可能会发现有必要根据平台以略有不同的方式配置和/或构建代码。这对于遗留代码或交叉编译尤其相关,我们将在第十三章,替代生成器和交叉编译中回到这个话题。了解处理器指令集以针对特定目标平台优化性能也是有利的。本章提供了检测此类环境的食谱,并提供了如何实施此类解决方案的建议。
当C语言工程很大,源码非常多时,如果还去使用GCC命令编译程序,几乎是不现实的。这时候,可以通过编写shell脚本去执行编译命令,当然这并不是一种好的方式。在Linux上我们可以写shell脚本,在Windows上则可以编写bat脚本
领取专属 10元无门槛券
手把手带您无忧上云