CMAKE简单入门
来源:互联网 发布:淘宝商城珠宝 编辑:程序博客网 时间:2024/06/08 06:00
CMAKE简单入门
单目录工程的CMAKE配置与编译
如果所有编译需要的文件都在同一个目录下,此时CMAKE比较容易配置。
首先建立如下所示的文件夹 Test
:
Test -- main.cpp -- tools.h -- tools.cpp
然后在 tools.h
中声明一个函数 void display()
,然后在 tools.cpp
中完成函数定义。最后在 main.cpp
中调用 void display()
函数。
比如,文件 tools.h
如下:
#ifndef _TOOLS_H#define _TOOLS_H#endif#include <iostream>using namespace std;void display();
文件 tools.cpp
如下:
#include "tools.h"void display(){ cout<<"This CMAKE project works!"<<endl;}
文件 main.cpp
如下:
#include "tools.h"int main(){ display();}
然后在 Test
文件夹根目录添加 CMakeLists.txt
文件如下:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)PROJECT(TEST)AUX_SOURCE_DIRECTORY(. DIR_SRCS)ADD_EXECUTABLE(main ${DIR_SRCS})
然后终端进入 Test
文件夹根目录,执行如下指令:
$ mkdir build #新建build目录,在build目录下编译可以使源文件免于干扰,便于编译文件的删改$ cd build #进入build目录$ cmake .. #执行上层目录中的CMakeLists.txt文件$ make #编译整个项目
你会在终端中看到以下系统消息:
说明编译 Compiling
和链接 Linking
都顺利完成了。接下来执行二进制文件即可。终端输入 ./main
执行 main
二进制文件。
显然,在单一目录下使用CMAKE编译工程是比较简单的。下面说明CMakeLists.txt文件的作用和语句的具体含义。
CMakeLists.txt
文件让程序员结构化地指定头文件和源文件的使用关系,让系统自动地生成项目的编译文件而无需程序员手动编写又长又复杂的编译指令。
上面测试项目中的 CMakeLists.txt
的语法说明如下:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # 指定可使用CMAKE的最低版本PROJECT(TEST) # 指定项目的名称,系统会自动生成默认的二进制文件生成目录和源文件索引目录AUX_SOURCE_DIRECTORY(. DIR_SRCS) # 指定在当前目录下查找源文件,并以列表的形式放入变量DIR_SRCS中保存ADD_EXECUTABLE(main ${DIR_SRCS}) # 指定编译出的二进制文件,使用的是变量DIR_SRCS中存储的所依赖的所有源文件
多目录工程的CMAKE配置与编译
如果工程目录下存在多个子目录,也不必惊慌。我们先模拟一个简单的多目录工程,新建一个工程文件夹 Test
。根据如下结构建立相应的文件夹和文件:
Test -- header -- CMakeLists.txt -- tools.cpp -- tools.h -- src -- main.cpp -- CMakeLists.txt
此时我们注意到,在 根目录 Test
和子目录 header
中都有 CMakeLists.txt
文件。这就是多目录工程使用CMAKE进行编译配置的关键点,接下来会有相应的解释。
大致的文件内容如下,我就直接在代码后注释中解释含义了:
根目录下的 CMakeLists.txt
文件如下:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # 指定要使用的CMAKE的最低版本PROJECT(TEST) # 指定项目的名称,一样会生成默认的变量存储相关信息ADD_SUBDIRECTORY(header) # 添加子文件夹header,此时CMAKE会去该子目录查找相应的CMakeLists.txt文件然后执行,最终会生成一个libTools.a的链接库供最后的链接Linking阶段使用AUX_SOURCE_DIRECTORY(./src DIR_SRCS) # 既然main.cpp文件在src目录下,那么我们就指定去./src下查找二进制文件的源文件,并放入变量DIR_SRCS中存储ADD_EXECUTABLE(main ${DIR_SRCS}) # 指定二进制文件的输出信息,使用在./src目录下查找到的源文件生成TARGET_LINK_LIBRARIES(main Tools) # 编译完成后,使用上面提到的libTools.a链接库完成相关函数的链接
从根目录中的CMakeLists.txt文件可以看出,对于一个对目录工程,CMAKE可以帮助我们自动地完成来自不同目录的文件之间的关联,这一点对于程序员来说无疑是巨大的帮助。
然后看一看具体子目录下的文件究竟写了啥。
子目录 header
下的 CMakeLists.txt
文件:
AUX_SOURCE_DIRECTORY(. DIR_TOOLS_SRCS) # 将当前目录下的源文件信息存入变量DIR_TOOLS_SRCS中ADD_LIBRARY(Tools ${DIR_TOOLS_SRCS}) # ADD_LIBRARY命令会使用上述源文件生成一个链接库libTools.a,其他用法可以百度
头文件 tools.h
如下:
#ifndef _TOOLS_H#define _TOOLS_H#endif#include <iostream>using namespace std;void display();
源文件 tools.cpp
如下:
#include "tools.h"void display(){ cout<<"It works!"<<endl;}
子目录 src
下的源文件 main.cpp
如下:
#include "../header/tools.h"int main(){ display();}
依旧,我们在根目录下创建 build
目录并在 build
目录下完成 cmake ..
和 make
指令。最后在该目录下执行二进制文件即可。
当然我列举的工程和使用的相关指令都比较简单,遇到类似的情况可以依葫芦画瓢,遇到问题可以百度一下。
你也可以去看一看 IBM
公司提供的CMAKE相关教程。
- CMake 简单入门
- cmake 简单入门 介绍
- cmake的简单入门
- CMAKE简单入门
- CMake简单入门
- CMake脚本编写简单入门示例
- Cmake入门
- CMake入门
- CMake 入门
- CMake入门
- CMake入门
- cmake入门
- Cmake入门
- cmake入门
- CMake入门
- CMake入门
- CMake入门
- cmake 入门
- Http错误码从1 到5 详解
- Luogu 3376(最大流)(Dinic+当前弧优化)
- Box-Cox变换
- 大数据正式5
- mui顶部菜单栏弹出框遮挡问题
- CMAKE简单入门
- List集合存储字符串和自定义对象并遍历(for循环和迭代)
- hdu-2191-悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- React 轮播图
- PAT——1066. 图像过滤(15)
- spark 集群搭建 详细步骤
- 我的程序员之旅
- Fibonacci数列
- 爬虫学习第一天-模仿01