C语言编译:CMakeLists.txt语句【01】
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】相关推荐
- ROS知识: vanilla(香草) CMakeLists.txt 的语法
(catkin/CMakeLists.txt - ROS Wiki) 前言 首先,对于学习ROS,CMakeLists.txt 的语法非常重要:如果不懂将无法开发!而要想明白 vanilla(香草) ...
- CMakeLists.txt V2.0
CMakeLists.txt V2.0 最简单例子 分include src目录 多个模块加载编译 CMakeLists.txt 添加arm-gcc 最简单例子 main.c #include < ...
- 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++. ...
- Cmake + CMakeLists.txt 编译SO库(JNI编译)
cmake android-ndk google demo- https://github.com/googlesamples/android-ndk 在Android Studio中使用C/C++库 ...
- “cmake 点点”表示在上一级目录(CMakeLists.txt所在目录)编译
CMake学习(一)_福尔摩斯帅双的博客-CSDN博客 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . ...
- cmake 编译文件 CMakeLists.txt 语法介绍与实例演练
一.Cmake 简介 cmake 是一个跨平台.开源的构建系统.它是一个集软件构建.测试.打包于一身的软件.它使用与平台和编译器独立的配置文件来对软件编译过程进行控制. 二.常用命令 1. 指定 cm ...
- Cmake知识----编写CMakeLists.txt文件编译C/C++程序
1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...
- Ubuntu下使用cmake结合CmakeLists.txt生成makefile文件并进行编译
转自1:https://www.cnblogs.com/cv-pr/p/6206921.html 转自2:https://blog.csdn.net/qqwangfan/article/details ...
- android 多个c文件编译成一个so,AndroidStudio使用CMakeLists.txt编译多个so库
对于单个so库编译就不说了,AndroidStudio可以直接生成单个so库编译的模板 对于实际项目中,多用到的是好几个库,下面说一下编译多个so库的情况 TIM图片20180927155108.pn ...
最新文章
- Android 任意区域截屏
- html批量转doc linux,HTML+CSS入门 Linux下如何批量将md文件转换为html文件
- 车辆工程用得到python吗_如今车辆工程真的不如以前了吗?
- jemeter python接口自动化测试平台_WEB接口开发与自动化测试基于PYTHON语言PDF_Python教程...
- 去除input框的值
- 复旦提出LReasoner: 用于文本逻辑推理的逻辑驱动上下文扩展和数据增强方法
- python英语单词 扇贝英语安卓下载_扇贝单词英语版下载-扇贝单词英语版手机客户端APP 3.4.503 安卓版-我游网...
- android过滤敏感词怎么做,敏感词过滤的简易实现
- 5G 网络的移动性管理上下文对比介绍
- 图标搜索引擎:Findicons
- Linux下的任务管理器-top命令
- UVa OJ 126 - The Errant Physicist (粗心的物理学家)
- 2022焊工(初级)考试题库及答案
- 病毒先生:天网恢恢,区块链行业的安全由谁来守护?
- 解决studio 3T时间到期方法
- 数据资产管理的5个步骤和6个要素
- linux 系统命令被后门修改_Linux、Windows权限维持常用后门学习总结
- 年薪40万AI工程师必备的能力项,你达标了吗?
- sonix c语言 pdf,松翰c语言(项目)例程(Sonix C language routines (project)).doc
- 台式电脑计算机硬盘清理,小编教您台式电脑如何清理灰尘