43 编译原理及cmake使用手册学习
0 引言
大量开源库需要通过cmake编译后使用,了解cmake的基本指令以及CMakeLists.txt的写法非常重要,其基础是了解编译原理。另外,为了对cmake编译的代码进行调试,需要了解CMakeList.txt的写法。本文将对这些关键问题进行探讨,并记录一些关键点。
参考了如下链接。
https://blog.csdn.net/wzzfeitian/article/details/40963457/ # cmake使用示例与整理总结 https://cmake.org/cmake/help/v3.3/command/target_link_libraries.html # cmake official documentation # cmake相关的教程
https://tuannguyen68.gitbooks.io/learning-cmake-a-beginner-s-guide/content/chap1/chap1.html
1 cmake编译原理
cmake通过指定源文件、外部include文件、 静态链接库(.a/.lib)文件、动态链接库(.so/.dll)文件的路径,以及生成文件的路径,将整个程序有序地组织起来,最终达到生成可执行程序的目的。
2 cmake commands(常用)
()cmake中的指令对大小写不敏感。
()PROJECT(project):工程名,一般采用最上层文件夹名
()ADD_SUBDIRECTORY(add_subdirectory):附加目录名,一般为src的目录,在文件比较多的时候采用
()LINK_DIRECTORIES (link_directories):静态链接库目录,供linker(链接器)使用
()ADD_EXECUTABLE (add_executable):可执行文件
()INCLUDE_DIRECTORIES(include_directories): .h头文件
()TARGET_LINK_LIBRARIES(target_link_libraries): .so文件,格式是 target_link_libraries(可执行文件名 链接库地址及文件)
写法为:以libboost_system.so.1.58.o 为例 “-lboost_system”
3 cmake预定义变量
$PROJECT_SOURCE_DIR$ : 工程的根目录
$PROJECT_BINARY_DIR$ : 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build
4 cmake的CMakeLists.txt语法
常用变量的意义解释都有,链接如下。
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables
5 cmake参数运用
(1)区分debug和release的方法:
点击Add Entry添加 Name: CMAKE_DEBUG_POSTFIX 、Type: STRING 、Value:-gd、Description:空
43 编译原理及cmake使用手册学习的更多相关文章
- Stanford公开课《编译原理》学习笔记(1~4课)
目录 一. 编译的基本流程 二. Lexical Analysis(词法分析阶段) 2.1 Lexical Specification(分词原则) 2.2 Finite Automata (典型分词算 ...
- Stanford公开课《编译原理》学习笔记(2)递归下降法
目录 一. Parse阶段 CFG Recursive Descent(递归下降遍历) 二. 递归下降遍历 2.1 预备知识 2.2 多行语句的处理思路 2.3 简易的文法定义 2.4 文法产生式的代 ...
- Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用
catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...
- 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析
文章中引用的代码均来自https://github.com/vczh/tinymoe. 看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print ...
- 跟vczh看实例学编译原理——一:Tinymoe的设计哲学
自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...
- Java编译原理
http://wenku.baidu.com/view/f9b1734b87c24028915fc3a3.html Java编译原理 1. 关于动态加载机制 学习Java比C++更容易理解OOP的思想 ...
- javac编译原理(一)
我们都知道,计算机只能识别二进制语言,是不能直接识别java c c++等高级语言的.将高级语言转化成计算机可以是别的二进制语言,这个过程就叫编译. 有次面试,面试官问了一道“java的编译原理是什么 ...
- 学了编译原理能否用 Java 写一个编译器或解释器?
16 个回答 默认排序 RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...
- 编译原理(六)自底向上分析之LR分析法
自底向上分析之LR分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本概念 1. LR分析:从左到右扫描(L)自底向上进行规约(R),是规范规约,也即最右推导(规范推导) ...
随机推荐
- _declspec(dllexport)和.def(转)
节选自:windows下编译和使用动态库dll http://blog.eonew.cn/archives/865 Microsoft 在 Visual C++ 的 16 位编译器版本中引入了 __e ...
- Python改变当前工作目录
import os print(os.getcwd()) # 打印当前工作目录 os.chdir('/Users/<username>/Desktop/') # 将当前工作目录改变为`/U ...
- java的集合工具类Collections
集合框架的工具类. Collections:集合框架的工具类.里面定义的都是静态方法. Collections和Collection有什么区别? Collection是集合框架中的一个顶层接口,它里面 ...
- CentOS 7.2 安装MySQL 5.7
CentOS 7之后的版本yum的默认源中使用MariaDB替代原先MySQL,因此安装方式较为以往有一些改变: 下载mysql的源 wget http://dev.mysql.com/get/mys ...
- LUOGU P2408 不同子串个数(后缀数组)
传送门 解题思路 后缀数组求本质不同串的裸题.\(ans=\dfrac{n(n+1)}{2} -\sum height[i]\). 代码 #include<iostream> #inclu ...
- 【Shiro】一、Apache Shiro简介
一.Apache Shiro简介 1.简介 一个安全性框架 特点:功能丰富.使用简单.运行独立 核心功能: Authentication(认证):你是谁? Authorization(授权):谁能干什 ...
- RQNOJ PID4 数列
题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是 ...
- 剑指offer第二版面试题11:旋转数组的最小数字(JAVA版)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...
- Lambda表达式演变历史
/// <summary> /// 爬虫委托 /// </summary> /// <param name="crawlerCode">爬虫编码 ...
- CSS中复选框单选框与常用12px文字不对齐问题(转载)
原文 http://www.cnblogs.com/aobingyan/p/3823556.html,有删改 目前中文网站上面的文字,绝大多数网站的主流文字大小为12px,因为在目前高分辨率显示器屏 ...