CMake简单使用说明

  1. 1. 概述
  2. 2. 使用流程
  3. 3. 示例
    1. 3.1 hello world
    2. 3.2 多个文件
  4. 4. 常用函数
  5. 5. 常用变量

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_required cmake最低版本要求 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_COMPILER C编译器 gcc
CMAKE_CXX_COMPILER C++编译器 g++
CMAKE_C_FLAGS C flags -std=gnu99
CMAKE_CXX_FLAGS C++ flags -std=c++11
ARCH 架构 amd64

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wind.kaisa@gmail.com

💰

×

Help us with donation