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使用手册学习的更多相关文章

  1. Stanford公开课《编译原理》学习笔记(1~4课)

    目录 一. 编译的基本流程 二. Lexical Analysis(词法分析阶段) 2.1 Lexical Specification(分词原则) 2.2 Finite Automata (典型分词算 ...

  2. Stanford公开课《编译原理》学习笔记(2)递归下降法

    目录 一. Parse阶段 CFG Recursive Descent(递归下降遍历) 二. 递归下降遍历 2.1 预备知识 2.2 多行语句的处理思路 2.3 简易的文法定义 2.4 文法产生式的代 ...

  3. Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用

    catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...

  4. 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe.   看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print ...

  5. 跟vczh看实例学编译原理——一:Tinymoe的设计哲学

    自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...

  6. Java编译原理

    http://wenku.baidu.com/view/f9b1734b87c24028915fc3a3.html Java编译原理 1. 关于动态加载机制 学习Java比C++更容易理解OOP的思想 ...

  7. javac编译原理(一)

    我们都知道,计算机只能识别二进制语言,是不能直接识别java c c++等高级语言的.将高级语言转化成计算机可以是别的二进制语言,这个过程就叫编译. 有次面试,面试官问了一道“java的编译原理是什么 ...

  8. 学了编译原理能否用 Java 写一个编译器或解释器?

    16 个回答 默认排序​ RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...

  9. 编译原理(六)自底向上分析之LR分析法

    自底向上分析之LR分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本概念 1. LR分析:从左到右扫描(L)自底向上进行规约(R),是规范规约,也即最右推导(规范推导) ...

随机推荐

  1. vue 点击切换图标

    <div @click="showImg" class="showSearch"> <img class="header_img&q ...

  2. Java高并发网络编程(四)Netty

    在网络应用开发的过程中,直接使用JDK提供的NIO的API,比较繁琐,而且想要进行性能提升,还需要结合多线程技术. 由于网络编程本身的复杂性,以及JDK API开发的使用难度较高,所以在开源社区中,涌 ...

  3. AcWing 160. 匹配统计 (哈希+二分) 打卡

    阿轩在纸上写了两个字符串,分别记为A和B. 利用在数据结构与算法课上学到的知识,他很容易地求出了“字符串A从任意位置开始的后缀子串”与“字符串B”匹配的长度. 不过阿轩是一个勤学好问的同学,他向你提出 ...

  4. ios移动输入框被软键盘遮挡

    页面输入框会出现被软键盘挡住的问题: 解决方法:获取input点击事件设置body高度 $('input').bind('click',function(e){ var $this = $(this) ...

  5. 3、第一个Appium测试

    运行脚本前环境准备: 1.IDE,推荐使用IJ 2.安装jdk环境,推荐>1.8 3.准备一台真机或者模拟器 4.SDK 5.maven环境 项目目录: CalculatorTest.java文 ...

  6. ssh 登陆免 known_hosts 提示

    修改配置文件 “~/.ssh/config”,加上这两行,重启服务器: StrictHostKeyChecking no UserKnownHostsFile /dev/null

  7. Chrome调试小技巧

    前言: 除了我们日常使用的调试方法,在Chrome中,其含有一些有意思的方法,有助于提高我们的开发调试效率. Sources页 command + p 文件跳转 使用Sublime的人或习惯用comm ...

  8. MySQL在Win10与Ubuntu下的安装与配置

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     近段时间把自己电脑(win).虚拟机(Ubun ...

  9. [BOI2009]Radio Transmission 无线传输

    题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入输出格式 输入格式: 第一行给出字符串的长度,1 < L ≤ 1, ...

  10. Alice's Classified Message HDU - 5558 后缀自动机求某个后缀出现的最早位置

    题意: 给定一个长度不超过 10W 的只包含小写字母的字符串,从下标 0 到 n−1.从下标 0 开始操作, 每次对于下标 pos查找下标 pos 开始的子串中最长的在其他地方出现过的长度,其他出现的 ...