CMake 简单入门

cmake - 跨平台Makefile生成工具。

Cmake是一个构建工具。是主流的构建系统。

为何要使用项目构建工具?

任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益,试想,一个几千行代码的小项目写到一个mian.cpp,这将是一个多么糟糕的事情。

决定代码的组织方式及其编译方式,也是程序设计的一部分。因此,我们需要cmake和autotools这样的工具来帮助我们构建并维护项目代码。

 

makefile,makefile不就是管理代码自动化编译的工具吗?为什么还要用别的构建工具?cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。

 

如果你自己动手写过makefile,你会发现,makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。因此,对于大多数项目,应当考虑使用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就动手编写。

 

安装:

方案1sudo apt install cmake

方案2:首先下载源码包http://www.cmake.org/cmake/resources/software.html

tar -xzvf cmake-x.x.x tar.gz

cd make-x.x.x

 

从Hello world开始:

第一步,建立项目名Hello。因此,第一部为项目代码建立目录Hello,与此项目有关的所有代码和文档都位于此目录下。

 

第二步:在hello目录下建立一个main.c文件

CMake 简单入门

 

第三步,在hello目录下建立一个新的文件CMakeLists.txt,它就是 cmake所处理的“代码“。其实,使用cmake管理项目本身也是在编程,所以称之为“代码(或脚本)”并不为过。在CMakeLists.txt文件中输入下面的代码(#后面的内容为代码行注释):

 

至此,整个hello项目就已经构建完毕,可以进行编译了。

第四步,编译项目。

为了使用外部编译方式编译项目,需要先在目录hello下新建一个目录build(也可以是其他任何目录名)。现在,项目整体的目录结构为:

CMake 简单入门

 

在windows下,cmake提供了图形界面,设定hello为source目录,build为二进制目录,然后点击configure即可开始构建,之后进入build目录运行make命令编译。

在linux命令行下,首先进入目录build,然后运行命令(注:后面的“..”不可缺少):

该命令使cmake检测编译环境,并生成相应的makefile。接着,运行命令make进行编译。编译后,生成的所有中间文件和可执行文件会在build目录下。

CMake 简单入门

 

解决办法,加上set语句,请确保你已经安装了g++(编译c加加代码)和gcc(编译c代码)

CMake 简单入门

 

上面两条注释的set 是因为我需要在海思板子上执行./hello,所以那么写。你可以直接就是在pc上执行的./hello就用红框的set就好。

CMake 简单入门

 

上面,我们提到了一个名词,叫外部编译方式。其实,cmake还可以直接在当前目录进行编译,无须建立build目录。但是,这种做法会将所有生成的中间文件和源代码混在一起,而且cmake生成的makefile无法跟踪所有的中间文件,即无法使用”make distclean”命令将所有的中间文件删除。因此,我们推荐建立build目录进行编译,所有的中间文件都会生成在build目录下,需要删除时直接清空该目录即可。这就是所谓的外部编译方式。

 

 

处理多源文件目录的方法

第一步:新建文件step1,并在此目录下新建src文件和编写main.cpp。

CMake 简单入门

 

在src下有Test1.h和Test1.c

 

CMake 简单入门

CMake 简单入门

 

第二步,编写项目主目录下的CMakeLists.txt.和src下的CMakeLists.txt。

 

CMake 简单入门

CMake 简单入门

 

第三步:在step1目录下新建build,并在此目录下cmake  .. 和make。

第四步:在ubuntu任何一个环境下执行./Test。前提是你设置的set如下:

CMake 简单入门

 

在工程中查找并使用其他程序库的方法

在开发软件的时候我们会用到一些函数库,这些函数库在不同的系统中安装的位置可能不同,编译的时候需要首先找到这些软件包的头文件以及链接库所在的目录以便生成编译选项。例如一个需要使用第三方库,需要头文件arctern_manager.h和file_buffer.h,链接库libarctern.so,现在该项目中有一个源代码文件main.cpp,放在项目的根目录中。

第一步:

在项目finedso的根目录中创建目录 cmake/modules/,在 cmake/modules/下创建文件 Findlibarctern.cmake。根目录下新建main.cpp

CMake 简单入门

 

目的是能使用cmake/modules/include/arctern/下的头文件和cmake/modules/lib文件。

 

第二步:

编写根目录下的CMakeLists.txt:

CMake 简单入门

 

编写modules下的Findlibarctern.cmake如下:

CMake 简单入门

 

 

第三步:在finedso目录下新建build,并在此目录下cmake  .. 和make。

 

关于加库报错的问题报错[email protected]_1.0

https://www.cnblogs.com/haiyang21/p/10233330.html

CMake 简单入门

 

参考:https://blog.csdn.net/appleml/article/details/52829412