CMake简单使用说明 - Fri, Nov 3, 2023
CMake简单使用说明
1. 概述
基于Make基础上的更高级的编译配置工具
2. 使用流程
- 写CMakeLists.txt
- 执行cmake
- 执行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 |