当前位置:首页 > 芯闻号 > 充电吧
[导读]一.背景知识:CMake是为了响应对NLM资助的Insight Segmentation和注册工具包(ITK)需要一个强大的跨平台构建环境(作为可见人类项目的一部分)而创建的。它受一个早期系统(称为p

一.背景知识:

CMake是为了响应对NLM资助的Insight Segmentation和注册工具包(ITK)需要一个强大的跨平台构建环境(作为可见人类项目的一部分)而创建的。它受一个早期系统(称为pcmaker,由Ken Martin和其他开发人员创建),支持可视化工具包(VTK)开源3D图形和可视化系统的影响。为了创建CMake,Kitware的Bill Hoffman包括了来自pcmaker的一些关键想法,并添加了自己的更多功能,考虑采用Unix配置工具的一些功能。最初的CMake实施是在2000年中期,加速发展发生在2001年初。由于其他开发人员纳入CMake到自己的系统,使得CMake得到了许多改进。例如,VXL软件社区采用CMake作为其构建环境,提供了许多基本功能。 Brad King添加了几个功能,以支持CABLE,自动包装环境和GCC-XML,以及GE公司研发对其测试基础架构(DART)的支持。而且还增加了其他功能,以支持VTK的构建环境转换为CMake,并支持ParaView,增加一个并行可视化系统,以支持洛斯阿拉莫斯国家实验室的高级计算实验室。

特点:

CMake是一个管理操作系统和独立编译方式的、可扩展的、开源的系统。与许多跨平台系统不同的是,CMake被设计成一个结合本地环境的系统。简单的配置文件放置在每个源目录(称为CMakeLists.txt文件)用于生成标准的构建文件(如。makefile在Unix和Windows MSVC项目/工作空间)用于通常的方式。CMake可以生成一个本地编译源代码的构建环境,创建库,生成包装器和构建可执行文件的任意组合。CMake支持in-place和out-of-place构建,因此可以支持多个构建从单个源树。CMake还支持静态和动态库的构建。它的另一个特点是生成一个缓存文件,叫CMakeCache.txt,该文件将会和一个图形化编辑器一起使用。例如,当CMake运行时,它位于文件、库和可执行文件,可能会遇到可选指令。这些信息是集中在缓存中的,这使得用户可以改变了前一个的本地构建文件。

CMake 的特点主要有:

1,跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。

2,能够管理大型项目。

3,简化编译构建过程和编译过程。CMake的工具链非常简单:cmake+make。

4,可扩展,可以为 CMake编写特定功能的模块,扩充 CMake功能

二.安装 CMake

cmake 目前已经成为各大 Linux 发行版提供的组件,如Ubuntu中,apt-get install cmake即可,如需要图形界面,输入命令:apt-get install cmake-qt-gui即可。如果你使用的操作系统(比如 Windows 或者某些 Linux 版本)没有提供 cmake 或者包含的版本较旧,建议你直接从 cmake 官方网站下载安装。

http://www.cmake.org/HTML/Download.html

在这个页面,提供了源代码的下载以及针对各种不同操作系统的二进制下载,可以选择适合自己操作系统的版本下载安装。

三.Cmake第一个程序

• 1.编写hello.c

• 2. 编写CMakeLists.txt


• 3. 执行cmake .
“.” 代表的意思是当前目录,cmake会查找该目录下的CMakeList.txt 文件
• 4.执行过程,生成Makefile


• 5. 执行make



四.Cmake语法详解

• 1.PROJECT

PROJECT(projectname [CXX] [C] [Java])

若是为省略[]中内容,就默认全部支持

该句话中,隐式的定义了两个变量,下面是CMakeCache.txt里面的文件内容,里面有各种刚刚系统配置的变量内容,下面我们查看两个隐藏变量的内容:


• 2. ADD_EXECUTABLE

生成可执行文件,可以忽略后缀

语法:

1.add_executable( [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])

2. add_executable( IMPORTED [GLOBAL])

3. add_executable( ALIAS )

具体更详细的可查看官网内容说明:

网址:

https://cmake.org/cmake/help/v3.7/command/add_executable.html?highlight=add_exe#command:add_executable

• 3. 设置变量

语法:

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])


• 4.添加打印信息

语法:

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]

"message to display" ...)



当执行CMake的命令的时候,stdout里会显示STATUS消息,而stderr上显示其他error消息。

而cmake的gui程序则会在log里显示错误信息。如下图:


以下是message其他参数内容

STATUS = 非重要消息;

WARNING = CMake 警告, 会继续执行;

AUTHOR_WARNING = CMake 警告 (dev), 会继续执行;

SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤;

FATAL_ERROR = CMake 错误, 终止所有处理过程;

• 5.ADD_SUBDIRECTORY

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

增加源目录,二进制目录

• 6.更换输出路径

更改EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH两变量内容

把生成可执行文件目录更改为工程目录的bin文件下,效果如下:



• 7.若是想make install,需要指定make install 目录

执行cmake命令,更改输出目录:

cmake –D CMAKE_PREFIX_FILE=/usr/local

查看CMakeCache.txt

前面的只是单独的指定目录,现在,指定需要make install的内容。
语法:
install(TARGETS targets... [EXPORT


如:如果我们想检查编译环境的时候,就可以加入CheckCXXCompilerFlag模块。


下面是该模块的内容:



具体的macro命令与C语言中的宏类似,而foreach等内容跟shell语法类似,这里就不详细阐述了。

• 10.find_package

语法:

• find_package( [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [[COMPONENTS] [components...]] [OPTIONAL_COMPONENTS components...] [NO_POLICY_SCOPE])

例:

find_package(OpenCV 3.1.0 REQUIRE)

该命令会查找和加载外部模块的设置

而变量_FOUND将会被设置去指明是否找到了该包

语法详解:

QUIET设置不显示找不到包的信息

REQUIRED 如果找不到就会停止处理并且显示错误信息

上述的信息已经能简单的查找到需要的包了,但是,我们需要更加详细的命令来使程序可读性更高

find_package跟install类似,有两种模式:

• 1.Module 模式

该模式被使用为上述的简单编写,cmake会去CMAKE_MODULE_PATH中需找Find.cmake,如果被找到,将会去读取并且执行,如果找不到,就会继续去查找安装目录的Module中查找,他将会去查找包,查看他的编号,处理一些需要的信息。

如果没有找到怎么办呢?

就会调用下面的Config模式。

• 2.Config 模式

但如果添加了CONFIG 参数,则会跳过MODULE模式。

• Config模式将会去定位一个配置文件,会寻找 Config.cmake 或者 -config.cmake模块。

只要找到了package,就会定义下列变量:

• _FOUND _INCLUDE_DIRS

• _INCLUDES _LIBRARIES

• _LIBRARIES

• _LIBS _DEFINITIONS

因此,我们可以通过判断这些变量来确定package是否被找到,也可以在包含库的时候使用这些变量。

还可以自己编写上述两种配置文件,然后利用:

SET(CMAKE_MODULE_PATH dir)指定查找的目录

Cmake语法简单介绍就到此为止了,想要知道更加详细的命令信息,可以去官网的参考文档中查找相关的语法,一般在查看大型应用的过程中,都是通过查看官网的开发文档来查看相关信息,然后通过cmake-gui修改相关变量,或者执行完cmake命令后,去修改CmakeCache命令。

官网文档地址:https://cmake.org/cmake/help/v3.7/

下面是笔者在实践过程中的一点小建议:

1. 当我们执行make前,不可以删除CMakeLists.txt文件。

2. 当我们把一个已经执行过的cmake命令的工程移到其他电脑时,注意删除CmakeCache.txt文件,再重新执行cmake命令。

3. 许多配置是可以在CMakeCache.txt里面修改的,如我们想更改编译工具,改成arm-linux-gcc。

修改CMakeCache.txt内容:


或者CMakeLists.txt里更改。

因为交叉编译的时候需要手动配置所调用的库文件,因此可以修改变量CMAKE_EXE_LINKER_FLAGS

4. 可以配合pkg-config使用,具体配置和使用方法,因不是本文重点,读者可以自行查找相关信息。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭