cmake 简单实例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43608153/article/details/90318711

cmake的强大之处在于跨平台,对于开发人员来说,不用花费精力去编写makefile了。极大的方便了苦逼的程序员。

现在,通过一个实例简单说明一下cmake的使用

创建名字为hello的工程,工程架构如下:

  1. 目录结构

    ├── build 编译生成的中间目录
    ├── CMakeLists.txt cmake配置
    ├── src 源文件目录
    │ ├── main.c
    │ ├── math.c
    ├── inc 头文件存放目录
    │ ├── math.h
    ├── out 可执行程序输出路径
    ├── readme 项目介绍

  2. 各文件内容

    工程代码 :

/*  main.c 内容 */
 
#include <stdio.h>
#include <math.h>
int main()
{
    int a = 0; 
	int b = 0;
	int c = 0;
	
	a = 21;
	b = 53;
	printf("a= %d; b = %d\n", a, b);
	
	c = add(a, b);
	printf("c = %d\n", c);
		
	return 0;
}

/*  math.c 内容 */
	
#include <stdio.h>

int add(int num1, int num2)
{
	
	printf("enter function add\n");	
		
	return (num1 + num2);
}

/* math.h 内容: */

#ifndef __MATH_H
#define __MATH_H

int add(int num1, int num2);

#endif

源文件及头文件很简单,此工程主要介绍一下cmake的构建定义文件 CMakeLists.txt 的内容及cmake 编译配置定义

cmake_minimum_required(VERSION 3.6)                       # 指定最低版本需求 cmake最低版本,如果CMake的当前版本低于指定的版本,它会停止处理工程文件,并报告错误
SET (CMAKE_CXX_COMPILER "gcc")                            # 设置GCC编译器
PROJECT(hello)                                            # 设置工程名和可支持的语言   
INCLUDE_DIRECTORIES (inc)                                 # 指定头文件目录
AUX_SOURCE_DIRECTORY (src DIR_SOURCE)                     # 遍历 src 源文件并保存在 DIR_SOURCE 变量中
ADD_EXECUTABLE(${PROJECT_NAME} ${DIR_SOURCE})             # 生成可执行文件
SET(CMAKE_BUILD_TYPE Debug)                               # 设置编译类型debug, debug 版会生成相关调试信息,可以使用GDB 进行 
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/out)     # 重定义可执行文件路径

对于cmake,他又其特定的语法及宏定义,这里就不跟大家介绍了,大家可以去官网自行去了解(https://cmake.org/)

创建好工程,我们来验证一下

  1. 进入工程的build路径,生成Make
    cmake …/
    #cmake 执行路径即CmakeLists.txt所在路径,cmake会根据CmakeLists.txt 生成Makefile; 此过程还会生成一些其他文件(一般可忽略),
    CmakeCache.txt 可在其中可更改变量
    cmake_install.cmake
    CmakeFiles
    Makefile cmake根据CmakeLists.txt 生成使用该工程的Makefile

  2. 直接执行编译命令
    make
    因为CMakeLists.txt 中制定了可执行文件的输出路径为out,所以out中会生成可执行文件hello
    3 . 直接运行可执行文件,即可看到执行结果
    ./hello

涉及到中大型工程,更多的程序员想要通过gdb工具来调试,cmake可直接指定编译参数来支持gdb的。
在cmake中有一个全局的环境变量,CMAKE_BUILD_TYPE,可以取Release或者Debug等值。然后可以通过设置CMAKE_CXX_FLAGS_DEBUG来设置在debug时的CXXFLAGS,这个值大家肯定都熟悉的哈。如果不需要添加调试信息,就直接修改CMAKE_BUILD_TYPE的值。
实现方式即为上述CMakeLists.txt 中的

SET(CMAKE_BUILD_TYPE Debug)                               # 设置编译类型debug, debug 版会生成相关调试信息,可以使用GDB 进行 
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

另外,cmake工具的是一个很强大的跨平台编译工具,这哥简单的例子中没有涉及到一些库的使用及生成,其实cmake是支持的,相关的资料有兴趣的朋友可以联系我,大家一起沟通学习进步。

猜你喜欢

转载自blog.csdn.net/weixin_43608153/article/details/90318711