1.cmake编译简介
单个文件编译C/C++时: gcc main.c/g++ main.cpp
多代码文件时:MakeFile,解决多文件编译难问题,运行make命令编译自动完成
cmake编译引入:根据一定的规则自动生成MakeFile的,也是有语法(cmake还是依赖make编译)。自动管理makefile文件,写起来也更方便、没有makefile那么复杂
2.cmake安装
apt安装:sudo apt-get install cmake(还是需要make命令 :sudo apt install gcc g++ build-essential)
源码安装:
sudo apt-get -y install libssl-dev
sudo wget https://cmake.org/files/v3.25/cmake-3.25.0.tar.gz
sudo tar -zxvf cmake-3.25.0.tar.gz
cd cmake-3.25.0
chmod 777 ./configure
sudo ./configure
sudo make -j8 && sudo make install
//最后使用新安装的cmake替换旧版本,其中/usr/local/bin/cmake为新安装的cmake目录。
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
cmake --version //查看是否安装成功
参考链接:https://www.cnblogs.com/ningao/p/17764972.html
3.cmakelist.txt介绍
(1)预定义变量:
PROJECT_NAME 项目名称
PROJECT_SOURCE_DIR 工程的根目录
PROJECT_BINARY_DIR 执行cmake命令的目录
CMAKE_CURRENT_SOURCE_DIR 当前CMakeLists.txt文件所在目录
CMAKE_C_FLAGS 设置C编译选项
CMAKE_CXX_FLAGS 设置C++编译选项
CMAKE_C_COMPILER 设置C编译器
CMAKE_CXX_COMPILER 设置C++编译器
EXECUTABLE_OUTPUT_PATH 设置编译后可执行文件目录
LIBRARY_OUTPUT_PATH 设置生成的库文件目录
(2)常用规则:
cmake_minimum_required(VERSION 3.16) 指令cmake 版本
project(hello_world) 设置工程名
include_directories(${PROJECT_SOURCE_DIR}/include) 添加头文件路径
link_directories(${PROJECT_SOURCE_DIR}/lib) 添加链接库的路径
add_subdirectory(module) 添加 module 子目录, 此目录下也要有CMakeLists.txt文件
add_executable(project1 main.c) 指定编译的可执行文件
add_library(lib1 SHARED library.c library.h) 指定生成的库文件,SHARED是生成动态库,STATIC后生成静态库
add_compile_options() 添加编译选项
target_link_libraries() 指定动态链接库
install() 指定make install的目录
set(XXXX YYYYYY) 用于设置和修改变量
${XXXX} 使用变量
4.例子:构建一个简单的项目
//CMakeList.txt内容
cmake_minimum_required(VERSION 3.15)
project(project1 C)
set(CMAKE_C_STANDARD 99)
add_executable(project1 main.c)
//main.c内容
#include <stdio.h>
int main() {
printf("Hello, CMakeList!\n");
return 0;
}
//编译一个debug版本:
mkdir debug && cd debug
cmake -DCMAKE_BUILD_TYPR=debug .. //指定编译模式为debug,此时会生成project1文件
(cmake -DCMAKE_BUILD_TYPE=release .. 指定编译模式为release)
参考链接:https://www.cnblogs.com/lidabo/p/16916177.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App