什么是CMake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的“C++”特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。


在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

1.编写 CMake 配置文件 CMakeLists.txt 。

2.执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile ccmake和cmake 的区别在于前者提供了一个交互式的界面 其中, PATH 是 CMakeLists.txt 所在的目录。

3.使用 make 命令进行编译。


本人在使用JetBrains公司的clion时发现有时候代码本身没有问题,但是一旦编译运行就会报类似于这样的错误:

undefined reference to `split(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2.exe: error: ld returned 1 exit status

明明调用的是内部的语法,但是却报错了,经过一番百度,发现是clion中的CMakeLists.txt文件内容出现了一点问题,因此我们有必要稍微学习一下简单的CMakeLists.txt 配置文件的编写。


入门案例

单个源文件:main.cpp

编写CMakeLists.txt

#CMake最低版本号要求
cmake_minimum_required(VERSION 3.12)
#项目信息
project(chapter5_01)
#使用C++ 11标准
set(CMAKE_CXX_STANDARD 11)
#指定生成目标
add_executable(chapter5_01 main.cpp)

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。

对于上面的CMakeLists.txt文件,依次出现了如下几个命令:

1.cmake_minimum_required :指定运行此程序所需要的CMake的最低版本

2.project :参数为:'chapter5_01',表示该项目名称是:chapter5_01

3.set:参数为:CMAKE_CXX_STANDARD 11,表示:设置C++标准为 C++ 11

4.add_executable:参数为:chapter5_01main.cpp,表示:将名为main.cpp的文件编译为名为chapter5_01的可执行文件

进阶案例

同一目录,多个源文件:main.cpp intercept.cpp intercept.h

编写CMakeLists.txt

#CMake最低版本号要求
cmake_minimum_required(VERSION 3.12)
#项目信息
project(chapter5_01)
#使用C++ 11标准
set(CMAKE_CXX_STANDARD 11)
#指定生成目标
add_executable(chapter5_01 main.cpp intercept.cpp)

对于该CMakeLists.txt文件,不同之处在于add_executable的参数,新增加了intercept.cpp,因为我们在源文件中用到了该文件


在上面我们所说的问题很有可能就是这里出现了问题,当你在创建了一个新的源文件时,clion的CMakeLists.txt文件没有更新,这是我们只需要手动添加这些文件到add_executable的参数里就可以了


clion之CMakeLists的学习的更多相关文章

  1. mac10.12.6系统配置clion编写CMakeLists文件运行opencv3

    按照mac10.12.6系统使用cmake安装opencv3.3.0+opencv_contrib-3.3.0下载编译安装好了文件以后,装好clion编译器,新建C++可执行工程,编写代码 opecv ...

  2. cmakelists 语法学习

    1.项目最外层cmake编写:----------用于kdevelop编译器 project(filtering) cmake_minimum_required(VERSION 2.8) ————必须 ...

  3. Linux c++ vim环境搭建系列(6)——CMakeLists.txt多文档多目录组织方法和编写示例

    CMakeLists.txt学习 1. 概要 主要是关于cmakelists.txt的编写模板,和多文档多目录的组织方法详解, 涉及第三方库的添加使用方法. 这里主要介绍cmakelists.txt的 ...

  4. clions的使用

    最近无聊玩了下CLion这个IDE,顺便学习了下CMAKE怎么使用.话说CLion的CMAKE的支持还不是特别的完好,和命令行模式还有有区别,有如下几个问题: 1:CMAKE的编译目录不能指定,而是I ...

  5. 《UNIX环境高级编程第三版》apue.h等源码文件的编译安装

    操作系统:Ubuntu 12/14 1.下载书中的源代码:点击下载 2.编译 tar -zxvf *.tar.gz cd ./apue.3e make 报错: can,t find -lbsd 解决办 ...

  6. CMake 使用笔记

    记录 CMake 相关知识. Prelude:读文档一定要有耐心! 问题一 CLion: CMakeLists.txt 中 set(CMAKE_CXX_FLAGS -Wall) 不起作用 Soluti ...

  7. CMake学习笔记四:usb_cam的CMakeLists解析

    最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...

  8. Andriod学习笔记3:Mac 平台下搭建 CLion 集成开发环境

    1. 安装Xcode 通过App store或者下载安装Xcode. 安装完成之后,最好启动一下Xcode,否则可能会报"Error:The C compiler "/usr/bi ...

  9. Ros学习——Cmakelists.txt文件解读

    1.过程 .Required CMake Version (cmake_minimum_required) //CMake 需要的版本 .Package Name (project()) //#定义工 ...

随机推荐

  1. 移动端 三段式布局 (flex方式)

    分享一种平时用的三段式布局(flex) 主要思路是  上中下    header&footer 给高度  main 占其余部分 html 部分 <div class='wrap'> ...

  2. 4 GC算法与种类

  3. centos7下安装ansible

    由于centos7预装了python,因此我们可以跳过python的安装环节(记得关闭防火墙) [root@model ~]# [root@model ~]# python --version Pyt ...

  4. mysql concat与concat_ws区别

    select concat('大','小') as size from 表 查询出结果为:大小 select concat('大',NULL) as size from 表 查询出结果为:null c ...

  5. 微信浏览器 UA

    mozilla/5.0 (linux; android 5.1.1; mi note pro build/lmy47v) applewebkit/537.36 (khtml, like gecko) ...

  6. Web基础之Spring IoC

    Spring之IoC 概念   IoC:Inversion of Control,中文通常翻译为"控制反转",它还有一个别名叫做依赖注入(Dependency Injection) ...

  7. UVA - 548 Tree(二叉树的递归遍历)

    题意:已知中序后序序列,求一个叶子到根路径上权和最小,如果多解,则叶子权值尽量小. 分析:已知中序后序建树,再dfs求从根到各叶子的权和比较大小 #include<cstdio> #inc ...

  8. asp.net mvc3用file上传文件大小限制问题

    在Windows2008下,如果上传比较大的文件,可能会出现404错误,(请求筛选模块被配置为拒绝超过请求内容长度的请求). 可通过如下方法解决: 打开URTracker根目录下的web.config ...

  9. 四十一、在SAP中添加多条件选择框

    一.代码如下: 二.其中我们的文本替换内容如下 三.需要注意的是波浪线的用法,以及区域的添加方法.运行程序,显示如下 四.不勾选时,查询出来是去掉国际的 五.勾选之后,查询的是全部的 六.显示如下 七 ...

  10. XPath--快速获取XML数据的节点或属性

    转载自 XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识.示例Xml: <?xml version="1.0" ...