CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的 Makefile 或者 project 文件,CMake 并不直接建构出最终的软件,而是产生标准的建构件(如 Makefile 或 projects)。

CMake的语法晦涩难记,但是一些基本的构成需要知道,这样其它语法不用死记,也是能够快速解决编译问题。本文以案例的方法,进行基本Cmake知识解释。

一、命令:project(project-name)

这个命令不是强制性的,但最好都加上。它会引入两个变量 project-name_BINARY_DIR 和 project-name_SOURCE_DIR,同时,cmake 自动定义了两个等价的变量 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR。

1.1 创建工程目录:

mkdir myCmake
cd  myCmake
mkdir build

以上构建后,目录如下:

./myCmake
├── CMakeLists.txt
├── build
└── hello.cpp

其中,CMakeLists.txt的代码是

#给工程取一个名字
PROJECT (myCmake)
#打印
MESSAGE(STATUS "This is BINARY dir" ${myCmake_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${myCmake_SOURCE_DIR})
MESSAGE(STATUS "This is PROJECT_SOURCE dir" ${PROJECT_SOURCE_DIR})
# 生成可执行的文件
ADD_EXECUTABLE(hello  hello.cpp)

以上红色是本质的代码:指定工程、指定编译结果。

其中,hello.cpp的代码是:

#include <stdio.h>
int main(int argc, char* argv[]){printf("Hello CMake!\n");
}

1.2 编译工程

输入编译指令

cd  myCmake/build
cmake .. 

工程的目录变为:

./myCmake
├── CMakeLists.txt
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── Makefile
│   └── cmake_install.cmake
└── hello.cpp

可以看到,原本空的build多了几个文件,这就是通过CMakeLists.txt生成的编译档;

继续键入

make

指令,最后编译完成,生成可执行文件hello。

注意:以上cmake编译在下级目录./build中进行,而不在CMakeLists.txt所在目录进行;这是一个路径方便的问题。暂时不要追究,这种编译法可以推广到任何问题,因此值得死记硬背。

二、 CMake的其它预定义变量

  • PROJECT_SOURCE_DIR:工程根目录;
  • PROJECT_BINARY_DIR:运行cmake命令的目录。笔者建议定义为${PROJECT_SOURCE_DIR}/build下。具体原因见后文外部编译部分;
  • CMAKE_INCLUDE_PATH:环境变量,非cmake变量;
  • CMAKE_LIBRARY_PATH:环境变量;
  • CMAKE_CURRENT_SOURCE_DIR:当前处理的CMakeLists.txt文件所在路径;
  • CMAKE_CURRENT_BINARY_DIR:target编译目录;
    • 使用ADD_SURDIRECTORY指令可以更改该变量的值;
    • SET(EXECUTABLE_OUTPUT_PATH < dir >) 指令不会对该变量有影响,但改变了最终目标文件的存储路径;
  • CMAKE_CURRENT_LIST_FILE:输出调用该变量的CMakeLists.txt的完整路径;
  • CMAKE_CURRENT_LIST_LINE:输出该变量所在的行;
  • CMAKE_MODULE_PATH:定义自己的cmake模块所在路径;
  • EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置;
  • LIBRARY_OUTPUT_PATH:重新定义目标链接库文件的存放位置;
  • PROJECT_NAME:返回由PROJECT指令定义的项目名称;
  • CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS:用来控制IF...ELSE...语句的书写方式;

C语言编译:CMakeLists.txt语句【01】相关推荐

  1. ROS知识: vanilla(香草) CMakeLists.txt 的语法

    (catkin/CMakeLists.txt - ROS Wiki) 前言 首先,对于学习ROS,CMakeLists.txt 的语法非常重要:如果不懂将无法开发!而要想明白 vanilla(香草) ...

  2. CMakeLists.txt V2.0

    CMakeLists.txt V2.0 最简单例子 分include src目录 多个模块加载编译 CMakeLists.txt 添加arm-gcc 最简单例子 main.c #include < ...

  3. c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)

    搞不太懂gcc和cmake(qmake)等的区别 1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器, 它可以编译很多种编程语言(括C.C++. ...

  4. Cmake + CMakeLists.txt 编译SO库(JNI编译)

    cmake android-ndk google demo- https://github.com/googlesamples/android-ndk 在Android Studio中使用C/C++库 ...

  5. “cmake 点点”表示在上一级目录(CMakeLists.txt所在目录)编译

    CMake学习(一)_福尔摩斯帅双的博客-CSDN博客 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . ...

  6. cmake 编译文件 CMakeLists.txt 语法介绍与实例演练

    一.Cmake 简介 cmake 是一个跨平台.开源的构建系统.它是一个集软件构建.测试.打包于一身的软件.它使用与平台和编译器独立的配置文件来对软件编译过程进行控制. 二.常用命令 1. 指定 cm ...

  7. Cmake知识----编写CMakeLists.txt文件编译C/C++程序

    1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...

  8. Ubuntu下使用cmake结合CmakeLists.txt生成makefile文件并进行编译

    转自1:https://www.cnblogs.com/cv-pr/p/6206921.html 转自2:https://blog.csdn.net/qqwangfan/article/details ...

  9. android 多个c文件编译成一个so,AndroidStudio使用CMakeLists.txt编译多个so库

    对于单个so库编译就不说了,AndroidStudio可以直接生成单个so库编译的模板 对于实际项目中,多用到的是好几个库,下面说一下编译多个so库的情况 TIM图片20180927155108.pn ...

最新文章

  1. Android 任意区域截屏
  2. html批量转doc linux,HTML+CSS入门 Linux下如何批量将md文件转换为html文件
  3. 车辆工程用得到python吗_如今车辆工程真的不如以前了吗?
  4. jemeter python接口自动化测试平台_WEB接口开发与自动化测试基于PYTHON语言PDF_Python教程...
  5. 去除input框的值
  6. 复旦提出LReasoner: 用于文本逻辑推理的逻辑驱动上下文扩展和数据增强方法
  7. python英语单词 扇贝英语安卓下载_扇贝单词英语版下载-扇贝单词英语版手机客户端APP 3.4.503 安卓版-我游网...
  8. android过滤敏感词怎么做,敏感词过滤的简易实现
  9. 5G 网络的移动性管理上下文对比介绍
  10. 图标搜索引擎:Findicons
  11. Linux下的任务管理器-top命令
  12. UVa OJ 126 - The Errant Physicist (粗心的物理学家)
  13. 2022焊工(初级)考试题库及答案
  14. 病毒先生:天网恢恢,区块链行业的安全由谁来守护?
  15. 解决studio 3T时间到期方法
  16. 数据资产管理的5个步骤和6个要素
  17. linux 系统命令被后门修改_Linux、Windows权限维持常用后门学习总结
  18. 年薪40万AI工程师必备的能力项,你达标了吗?
  19. sonix c语言 pdf,松翰c语言(项目)例程(Sonix C language routines (project)).doc
  20. 台式电脑计算机硬盘清理,小编教您台式电脑如何清理灰尘

热门文章

  1. pytorch 笔记:torch_geometric (1)创建一张图
  2. pyecharts应用3 Faker函数库
  3. Tableau实战系列浏览 Tableau 环境(八) -tableau文件类型、语言和区域设置以及图标
  4. Flink从入门到精通100篇(十八)-CentOS环境中搭建Flink分布式集群
  5. 使用网盘搭建svn服务器详解步骤
  6. tensorflow2.0的cpu与gpu运行时间对比
  7. 互联网性能与容量评估的方法论和典型案例
  8. 使用 Spring Boot 快速构建 Spring 框架应用
  9. Activity中UI框架基本概念
  10. 电信用户流失预测案例(3)