Cmake入门(一文读懂)

1、Cmake简介

  CMake是一个强大的跨平台构建工具,它能够自动生成用于构建项目的Makefile、Visual Studio项目文件或其他构建系统所需的文件。使用CMake,可以更轻松地管理复杂的C语言项目,使它们易于维护和跨平台。
  如果对Makefile不了解可以看此文章→Makefile入门

2、安装CMake

  首先,需要安装CMake。在Linux设备可以使用sudo apt-get install cmake。或者从CMake官网下载适合操作系统的安装程序。安装完成后,可以在终端中运行以下命令来检查CMake是否安装成功:

cmake --version

  如果成功安装,将看到CMake的版本信息。

3、CMakeLists.txt

  cmake的核心就是CMakeLists.txt文件,(注意:CMakeLists.txt文件名严格区分大小写,确保文件名准确无误)告诉CMake如何构建项目。通过CMakeLists.txt可以决定工程文件生成二进制文件动态库静态库文件,以及链接各种库文件,十分灵活好用,以下几种实例都会讲到。

4、单目录简单实例

  一个工程目录下最简单需要编写一个CMakeLists.txt文件,然后创建build文件在此文件内进行 cmake . . && make编译此工程。如果多级目录,也可以使用多级CMakeLists.txt用于分开管理。以下是一个简单的示例:
在这里插入图片描述

4.1、CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
PROJECT (MyCProject)
# 设置编译选项,加入-g可以gdb调试
SET(CMAKE_CXX_FLAGS "-g")
SET(CMAKE_C_FLAGS "-g")
# 添加源文件
file(GLOB SOURCES "src/*.c")
# 添加头文件目录
#INCLUDE_DIRECTORIES(../include)
# 生成可执行文件
add_executable(src ${SOURCES})

  以上的CMakeLists.txt文件做了以下事情:

  • CMakeLists.txt不区分函数名字母大小写,一般一个函数都用大写或者都用小写
  • **#**号用于注释语句
  • cmake_minimum_required( )指定CMake的最低版本。
  • PROJECT( ) 定义项目名称。
  • SET(CMAKE_CXX_FLAGS “-g”)设置C语言标准,此外set(A B)函数还用于赋值将B赋予A。
  • 使用file()函数将所有在src/目录下的.c文件赋给变量SOURCES
  • 使用include_directories()函数添加头文件目录。
  • 链接库文件路径LINK_LIBRARIES(xxxx.a xxxx.so)
  • 链接库文件LINK_DIRECTORIES(. ./lib/ . ./build/xxx.a . ./build/xxx.so)
  • 最后,使用**add_executable()**函数生成可执行文件,将源文件${SOURCES}执行生成src可执行程序。
  • 生成静态库文件 ADD_LIBRARY(xxx STATIC ${SRC_LIST})生成静态库文件xxx.a
  • 生成动态库 ADD_LIBRARY(xxx SHARED ${SRC_LIST})生成动态库文件xxx.so

4.2、构建bulid

内部构建

  直接在项目目录下进行cmake 和 make ,这会导致出现很多临时文件,很不友好和美观
在这里插入图片描述

外部构建

  在项目根目录 新建build文件 在此文件中进行cmake . . 和make,隐藏不不要的临时文件,便于其他操作。
  例如:在项目根目录下创建一个build/文件夹,并在终端中进入该文件夹。然后运行以下命令:

cmake ..

  这将使用根目录中的CMakeLists.txt文件来配置项目。接下来,运行以下命令来编译项目:

make

这将生成可执行文件MyCProject,可以在build/目录下找到它。

4.3、运行C语言程序

  现在,可以在终端中运行的C语言程序:

./src

  C语言程序应该正常运行了。
在这里插入图片描述

5、多目录文件简单实例

在这里插入图片描述

test-2/
    CMakeLists.txt
    src/
    	CMakeLists.txt
        main.c
        utils.c
    include/
        utils.h
    build/
  • CMakeLists.txt 是CMake的配置文件,用于告诉CMake如何构建项目。
    -此工程为多个CMakeLists.txt文件,每个CMakeLists.txt文件管理此目录下的源文件,并且上级CMakeLists.txt可以递归管理子目录
  • src/ 包含的C源代码文件。
  • include/ 包含的头文件。
  • build/ 是构建输出目录,用于存放生成的可执行文件和中间文件,可以按照自己的需求删除和手动创建。

5.1、根目录CMakeLists.txt

cmake_minimum_required(VERSION 3.16)


PROJECT (ZPJ_TEST_1)

SET(CMAKE_CXX_FLAGS "-g")
SET(CMAKE_C_FLAGS "-g")

ADD_SUBDIRECTORY(./src ./bin)

ADD_SUBDIRECTORY(./src ./bin)
将src路径下的CMakeLists.txt进行处理,并且将处理的结果放在bin下,如果是在build目录下cmake的,那么结果就会在build/bin/下
此语句可指定子目录的 相对路径或绝对路径,可省略bin文件,默认生成子目录同名文件放入生成的文件

5.2、源文件目录

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

file(GLOB SRC_LIST "./*.c")
include_directories(../include)

ADD_EXECUTABLE(src ${SRC_LIST})

src/main.c

#include <stdio.h>
#include "utils.h"

int main() {
    printf("Hello, CMake!\n");
    int result = add(2, 3);
    printf("2 + 3 = %d\n", result);
    return 0;
}

src/utils.c

#include "utils.h"

int add(int a, int b) {
    return a + b;
}

5.3、utils.h

#ifndef UTILS_H
#define UTILS_H

int add(int a, int b);

#endif

5.4、创建build

  运行cmake . . 和 make命令,将成功构建多文件C语言项目。
在这里插入图片描述

6、生成库文件和链接外部库文件

把上述例子目录结构改变为
在这里插入图片描述
然后更改每个CMakeLists.txt文件
按上图顺序依次为
根目录

cmake_minimum_required(VERSION 3.16)


PROJECT (ZPJ_TEST_1)

SET(CMAKE_CXX_FLAGS "-g")
SET(CMAKE_C_FLAGS "-g")

ADD_SUBDIRECTORY(./utils/ ./utils/)
ADD_SUBDIRECTORY(./src ./bin)

src

cmake_minimum_required(VERSION 3.16)

file(GLOB SRC_LIST "./*.c")
include_directories(../include)
LINK_DIRECTORIES( ../build/utils)
LINK_LIBRARIES(utils.so)
ADD_EXECUTABLE(src ${SRC_LIST})

utils

cmake_minimum_required(VERSION 3.16)

file(GLOB SRC_LIST "./*.c")
include_directories(../include)

ADD_LIBRARY(utils SHARED ${SRC_LIST})

此为删减版build目录结构
在这里插入图片描述
最后运行src
在这里插入图片描述

7、注意

  不一定每个目录里都要有CMakeLists.txt文件,只要CMakeLists.txt里的各个路径引用正确即可

  CMakeLists.txt中还有许多函数和宏,在大型项目组十分常见,可以自行查找,本文不再加以赘述。

  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要创建一个cmake-demo项目的入门教程,首先需要在根目录下创建一个名为CMakeLists.txt的文件,并创建一个名为hello的子目录。可以使用以下命令完成这些操作:mkdir cmake-demo && cd cmake-demo touch CMakeLists.txt mkdir hello 。 然后,在CMakeLists.txt文件中编写CMake命令来配置项目。CMake脚本文件由一系列CMake命令组成,通常以.cmake作为后缀名。你可以使用cmake命令来配置项目,例如:cmake -D <var>=<value> [options] <path/to/source> 。 最后,你可以在hello目录下添加源代码文件,例如一个简单的hello.cpp文件,然后使用CMake来生成构建系统的文件,例如Makefile或Visual Studio的项目文件。运行cmake命令来生成构建系统文件,然后使用构建系统来构建项目。 请注意,这只是一个简单的cmake-demo入门教程的概述,实际上还有很多更详细的内容可以涉及。你可以参考cmake的文档来获取更多的信息,例如使用cmake --help或man cmake命令来查看文档。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [CMake构建工具使用教程](https://blog.csdn.net/zzy979481894/article/details/129109513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值