Cmake的初步使用

Last updated on 8 months ago

以前 接触Ros是有用过cmake,以及 clickhouse 编译源码时也有用过cmake,但是只是执行命令,没怎样看,最近了解了下

cmake 相对于 Makefile 更加便捷,cmake会根据 CMakeLists.txt的内容 会自动生成 Makefile,想着最近捣鼓的项目代码量也上来了,所以试试 cmake,这里记录做下记录

最近想着一个 项目源文件和头文件如何布局,以及一些模块的代码要在那个文件夹,这里现在考虑的不是很完善,现在方案是 .h 和 .cpp 分离开,并且一个功能模块占用一个文件夹

image-20220419005501875 build 里面就是 cmake 生成的文件,在项目根目录编写 个 CmakeLists.txt ,cmake 会根据这个生成对应的makefile文件

aux_source_directory(路径 变量名字) 是指定路径的源文件 保存到指定的变量(这里都是用空格隔开的)
期初一直提示没有找 undefined reference 原因就是 没有导入相对应的文件

  • $是取值的符号

  • set是赋值

  • message相对于 print

  • include_directories(路径) 是找到相对应的头文件

  • ADD_EXECUTABLE(生成文件 源文件….)

  • target_link_libraries() 链接对应库 相当于 gcc 中的 -L

  • file(GLOB_RECURSE SRC_DIR_LIST "src/*.cpp" "src/*.c")    这个可以一次性遍历出全部的源文件
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#cmake最低版本需求,不加入此行会受到警告信息
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(Server) #项目名称

aux_source_directory(./src/common SRC_common)
aux_source_directory(./src/threadpool SRC_threadpool)
#file(GLOB_RECURSE SRC_DIR_LIST "src/*.cpp" "src/*.c") #遍历获取source/路径下所有的*.cpp和*.c文件列表

#打印SRC_DIR_LIST中列表信息

set(SRC_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
message("SRC_ROOT_PATH ${SRC_ROOT_PATH}")

include_directories(${SRC_ROOT_PATH}/include)
# 指定可执行文件的输出目录
set( ${PROJECT_SOURCE_DIR}/bin)

ADD_EXECUTABLE(main main.cpp ${SRC_common} ${SRC_threadpool} )
target_link_libraries(main pthread)


现在看来 cmake 是比较方便,不用写编译的命令,威力很强大,以后遇到什么需求了再来完善,用着学,学着用。