cmake编译介绍--cmakelist.txt

发布时间 2023-11-12 15:02:17作者: 枫飘过的天1

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-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