clion之CMakeLists的学习
什么是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_01和main.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的学习的更多相关文章
- mac10.12.6系统配置clion编写CMakeLists文件运行opencv3
按照mac10.12.6系统使用cmake安装opencv3.3.0+opencv_contrib-3.3.0下载编译安装好了文件以后,装好clion编译器,新建C++可执行工程,编写代码 opecv ...
- cmakelists 语法学习
1.项目最外层cmake编写:----------用于kdevelop编译器 project(filtering) cmake_minimum_required(VERSION 2.8) ————必须 ...
- Linux c++ vim环境搭建系列(6)——CMakeLists.txt多文档多目录组织方法和编写示例
CMakeLists.txt学习 1. 概要 主要是关于cmakelists.txt的编写模板,和多文档多目录的组织方法详解, 涉及第三方库的添加使用方法. 这里主要介绍cmakelists.txt的 ...
- clions的使用
最近无聊玩了下CLion这个IDE,顺便学习了下CMAKE怎么使用.话说CLion的CMAKE的支持还不是特别的完好,和命令行模式还有有区别,有如下几个问题: 1:CMAKE的编译目录不能指定,而是I ...
- 《UNIX环境高级编程第三版》apue.h等源码文件的编译安装
操作系统:Ubuntu 12/14 1.下载书中的源代码:点击下载 2.编译 tar -zxvf *.tar.gz cd ./apue.3e make 报错: can,t find -lbsd 解决办 ...
- CMake 使用笔记
记录 CMake 相关知识. Prelude:读文档一定要有耐心! 问题一 CLion: CMakeLists.txt 中 set(CMAKE_CXX_FLAGS -Wall) 不起作用 Soluti ...
- CMake学习笔记四:usb_cam的CMakeLists解析
最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...
- Andriod学习笔记3:Mac 平台下搭建 CLion 集成开发环境
1. 安装Xcode 通过App store或者下载安装Xcode. 安装完成之后,最好启动一下Xcode,否则可能会报"Error:The C compiler "/usr/bi ...
- Ros学习——Cmakelists.txt文件解读
1.过程 .Required CMake Version (cmake_minimum_required) //CMake 需要的版本 .Package Name (project()) //#定义工 ...
随机推荐
- java提升一:内部类
1.总体定义 定义在一个类中的类,就称之为内部类. 2.为什么要使用内部类 (1)使用匿名内部类,无需对只使用一次的接口实现类进行创建,方便了对于接口和抽象类的实现及其使用. (2)每个内部类都可以独 ...
- 深入理解JVM Note
第2章 Java内存区域与内存溢出异常 运行时数据区域 在虚拟机有栈.堆和方法区. 线程共享的:堆.方法区 不共享的:栈.程序计数器(代码执行的行号) 程序计数器(Program Counter Re ...
- Day4 - M - Roads in Berland CodeForces - 25C
There are n cities numbered from 1 to n in Berland. Some of them are connected by two-way roads. Eac ...
- 012.Oracle数据库,字符串文本大小写转换,转大写,转小写,首字母大写
/*转大写*/ SELECT UPPER(TITLE_EN) FROM ME_EO WHERE ( ISSUE_DATE BETWEEN to_date( '2017-02-04', 'yyyy-MM ...
- CSV用excel打开乱码
utf-8 csv 文件用 excel 打开乱码问题 其实这个问题很久之前遇到过, 应该是没解决, 当时的情况是openoffice打开正常而excel打开不正常, 后来也没解决了, 只能把编码转了. ...
- oracle job不运行,定位问题
一. job的运行频率设置 1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60 2.Toad中提供的: 每天:trunc(sysdate+ ...
- 2.11 学习总结 之 ajax
一.说在前面 昨天 学习了 json 数据结构 今天 学习ajax 并使用 json 二.jquery的ajax操作 1.查询jquery的官方文档发现与ajax相关的jquey方法如下: 1)$. ...
- MAC设置允许任何来源
在升级了macOS Sierra (10.12)版本后在“安全性与隐私”中不再有“任何来源”选项 接下来,我们就打开终端,然后输入以下命令: sudo spctl --master-disable 输 ...
- scala文件通过本地命令运行
1.准备(检查) a.本地环境安装jdk b.安装scala 2.sublime编辑scala文件,并存放到F:\plan_next\scala_compile下 3.文件目录中切换到cmd中(文件目 ...
- 【LeetCode】反转字符串
[问题] 编写一个函数,其作用是将输入的字符串反转过来. 示例 : 输入: "hello" 输出: "olleh" 示例 : 输入: "A man, ...