欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux下CMake安装使用

程序员文章站 2024-03-14 11:10:22
...

1. CMake介绍

CMake是“cross platform make”的缩写,是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装或编译过程。Cmake 并不直接建构出最终的软件,而是产生标准的建构档,如 Unix 的 makefile 或 Windows的 projects/workspaces,然后再依一般的建构方式使用。在输出makefile或者project文件的同时,能测试编译器所支持的C++特性。CMake 的组态档取名为 CmakeLists.txt,每个目录一个。

CMake 使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 CMakeLists.txt 需要手工编写,也可以通过编写脚本进行半自动的生成。CMake 提供了比 autoconfig 更简洁的语法。在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

1) 编写CMakeLists.txt

2) 执行命令“cmake PATH”或者“ccmake PATH”生成 Makefile ( PATH 是 CMakeLists.txt 所在的目录 )

3) 使用 make 命令进行编译。

 CMake的特点主要有:

1) 跨平台,并可生成native编译配置文件,在Linux/Unix平台,生成makefile;在苹果平台,可以生成xcode;在Windows平台,可以生成MSVC的工程文件;

2) 能够管理大型项目,KDE4就是最好的证明;

3) 简化编译构建过程和编译过程。Cmake的工具链非常简单:cmake+make。

4) 高效虑,按照KDE官方说法,CMake构建KDE4的kdelibs要比使用autotools来构建KDE3.5.6的kdelibs快40%,主要是因为 Cmake在工具链中没有libtool。

5) 可扩展,可以为cmake编写特定功能的模块,扩充cmake功能。

2. CMake下载安装

直接在线安装:apt-get install cmake  

离线安装如下:

点击下载安装包,选择对应的版本,这里我选择的是源码版本安装。

注意:如果下载的binary版本安装

方法1:解压后需要为cmake创建软连接

 # ln -s /home/app/cmake-3.17.0-Linux-x86_64/bin/*  /usr/bin/ 

验证cmake的安装是否成功:  cmake -version

方法2:

安装包解压后,编辑vim /etc/profile或者vim ~/.bashrc添加

export PATH=$PATH:/home/app/cmake-3.17.0-Linux-x86_64/bin

验证cmake的安装是否成功:  cmake -version

1) 源码安装

# cd /home

# mkdir app && cd app

# wget https://cmake.org/files/v3.17/cmake-3.17.0.tar.gz  //若手动下载,拷贝此路径下

# tar -zxvf cmake-3.17.0.tar.gz

安装gcc等程序包(安装过则忽略)  # yum install gcc-c++

# cd cmake-3.17.0

# ./bootstrap

# gmake

# make install

2) 查看cmake版本

# cmake -version

Linux下CMake安装使用

3. CMake编译原理

CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命

令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤:cmake和make

cmake指向CMakeLists.txt所在的目录,例如cmake .. 表示CMakeLists.txt在当前目录的上一级目录。cmake后会生成很多编译的中间文件以及makefile文件,所以一般建议新建一个新的目录,专门用来编译,例如

# mkdir build 

# cd build

# cmake .. 

# make     

4. CMake样例一

这里举例最简单的HelloWorld

1) 新建工程目录:用来存放工程文件的文件夹HelloWorld

2) 编写源文件:HelloWorld.cpp,编写如下内容:

#include <iostream>
using namespace std;
 
int main() {
  cout << "HelloWorld" << endl;
  return 0;
}

3) 编写CMakeLists.txt:

在cpp文件同级目录下新建一个CMakeLists.txt文件,编写如下内容:

#cmake最低版本需求,不加入此行会受到警告信息
cmake_minimum_required(VERSION 3.17)
project(HelloWorld) #项目名称
#把当前目录(.)下所有源代码文件和头文件加入变量SRC_LIST
aux_source_directory(. SRC_LIST)
#生成应用程序 HelloWorld (在windows下会自动生成HelloWorld.exe)
add_executable(HelloWorld ${SRC_LIST})

4) 创建build目录(目的:存放很多编译的中间文件以及makefile文件,生成的配置工程都在build目录下,比较清晰)

外部编译方式:虽然cmake可以直接在当前目录进行编译,无须建立build目录。但是,会将所有生成的中间文件和源代码混在一起,而且cmake生成的makefile无法跟踪所有的中间文件,即无法使用”make distclean”命令将所有的中间文件删除。因此,我们推荐建立build目录进行编译,所有的中间文件都会生成在build目录下,需要删除时直接清空该目录即可。这就是所谓的外部编译方式。

# mkdir build

Linux下CMake安装使用

5) 编译

# cd build

# cmake .. 

Linux下CMake安装使用

# make     

Linux下CMake安装使用

6) 运行:

#./HelloWorld

Linux下CMake安装使用

5. CMake样例二(多文件)

1) 新建工程目录:用来存放工程文件的文件夹Project

2) 编写源文件:

Func.h

#ifndef __FUNC__
#define __FUNC__
class CFunc
{
public:
	CFunc();
	~CFunc();

	int Add(int x, int y);
};
#endif

Func.cpp

#include "../include/Func.h"
CFunc::CFunc()
{
}

CFunc::~CFunc()
{
}

int CFunc::Add(int x, int y)
{
	return x + y;
}

main.cpp

#include "../include/Func.h"
#include <stdio.h>
using namespace std;

int main() {
	CFunc *pFunc = new CFunc();
	int nRes = pFunc->Add(10, 20);
	printf("x + y = %d\n", nRes);
	return 0;
}

3) 编写CMakeLists.txt:

在根目录下新建一个CMakeLists.txt文件,编写如下内容:

#1.cmake verson,指定cmake版本 
cmake_minimum_required(VERSION 3.2)
#2.project name,指定项目的名称,一般和项目的文件夹名称对应
project(TestAdd)
#3.head file path,头文件目录
include_directories(include)
#4.source directory,源文件目录
aux_source_directory(src DIR_SRCS)
#5.set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
set(TEST_ADD ${DIR_SRCS})
#6.add executable file,添加要编译的可执行文件
add_executable(${PROJECT_NAME} ${TEST_ADD})
#7.add link library,添加可执行文件所需要的库,比如我们用到了libXLSDKVCN.so(命名规则:lib+name+.so),就添加该库的名称
target_link_libraries(${PROJECT_NAME} XLSDKVCN)

4) 创建build目录

# mkdir build 

Linux下CMake安装使用

5) 编译

# cd build

# cmake .. 

Linux下CMake安装使用

# make 

Linux下CMake安装使用

6) 运行: 

Linux下CMake安装使用

相关标签: CMake