kaisawind's blog
  • 关于
  • 所有帖子

CMake简单使用说明 - Fri, Nov 3, 2023

CMake简单使用说明

1. 概述

基于Make基础上的更高级的编译配置工具

2. 使用流程

  1. 写CMakeLists.txt
  2. 执行cmake
  3. 执行make

3. 示例

3.1 hello world

  • main.c
#include <stdio.h>

void hello()
{
    printf("hello world!");

    return;
}

int main()
{
    hello();
    return 0;
}
  • CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (hello)

# 指定生成目标
add_executable(hello main.c)

# 指定生成静态链接库目标
add_library(xhello STATIC main.c)

查看静态库

readelf -c  libxhello.a

输出

Index of archive libxhello.a: (2 entries, 0xc bytes in the symbol table)
Contents of binary libxhello.a(main.c.o) at offset 0x5c
        hello
        main

3.2 多个文件

  • hello.h
void hello();
  • hello.c
#include <stdio.h>

void hello()
{
#ifdef PRINT_OK
    printf("ok");
#endif
    printf("hello world!");

    return;
}
  • main.c
#include "hello.h"

int main()
{
    hello();
    return 0;
}
  • CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (hello)

# 添加宏定义
add_definitions(-D PRINT_OK)

# 添加头文件路径
include_directories(.)

# 指定生成目标
add_executable(hello main.c hello.c)

# 指定生成静态链接库目标
add_library(xhello STATIC main.c hello.c)

4. 常用函数

函数说明示例
message输出日志message(STATUS "hello" ${PROJECT_NAME})
project项目名称project(hello)
cmake_minimum_requiredcmake最低版本要求cmake_minimum_required (VERSION 2.8)
add_definitions添加宏定义add_definitions(-D PRINT_OK)
add_definitions添加宏定义值add_definitions(-D PRINT_OK="OK")
include_directories添加头文件目录include_directories(.)
target_include_directories指定目标添加头文件目录target_include_directories(hello PUBLIC .)
add_executable生成可执行文件add_executable(hello main.c hello.c)
add_library生成静态链接库add_library(xhello STATIC main.c hello.c)
add_library生成动态链接库add_library(xhello SHARED main.c hello.c)
target_link_libraries链接库文件target_link_libraries(hello xhello)
link_directories添加库搜索路径link_directories(.)
find_library添加库搜索路径find_library(.)
aux_source_directory添加目录下的所有源代码aux_source_directory(. hello)

5. 常用变量

变量说明示例
CMAKE_C_COMPILERC编译器gcc
CMAKE_CXX_COMPILERC++编译器g++
CMAKE_C_FLAGSC flags-std=gnu99
CMAKE_CXX_FLAGSC++ flags-std=c++11
ARCH架构amd64


辽ICP备2021007608号 | © 2025 | kaisawind

Facebook Twitter GitHub