cmake

1、从一个项目目录说起

.
├── bin
├── build
├── CMakeLists.txt
├── include
│   ├── testFunc1.h
│   └── testFunc.h
└── src
    ├── main.c
    ├── testFunc1.c
    └── testFunc.c

我们不必关心目录中的文件的功能,我们只看看CMakeLists.txt中的内容.

cmake_minimum_required (VERSION 2.8) # 设置运行本项目所需要的cmake最小版本号
project (demo) # 设置项目名称
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 设置可执行文件的输出目录
aux_source_directory (src SRC_LIST) # 设置STC_LIST变量为src目录下所有文件
include_directories (include) #设置指定包含头文件的目录
add_executable (main ${SRC_LIST}# 最终可执行文件的名字main.ext,依赖的所有文件

2、cmake其他命令

add_subdirectory (src),这个命令可以向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制的存放位置,具体用法可以百度。

这里指定src目录下存放了源文件,当执行cmake时,就会进入src目录下去找src目录下的CMakeLists.txt,所以在src目录下也建立一个CMakeLists.txt,内容如下,

add_library (testFunc_shared SHARED ${SRC_LIST})生成动态库或静态库(第1个参数指定库的名字;第2个参数决定是动态还是静态,如果没有就默认静态;第3个参数指定生成库的源文件)

set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)指定库文件输出路径

option(MYDEBUG "enable debug compilation" OFF)其第一个参数是这个option的名字,第二个参数是字符串,用来描述这个option是来干嘛的,第三个是option的值,ON或OFF,也可以不写,不写就是默认OFF。

add_compile_options(-std=c++11 -Wall)添加编译选项

set(SRC main.c test.c xx.c xxx.c)设置变量SRC为后面指定的文件

find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)在指定目录下查找指定库,并把库的绝对路径存放到变量里,其第一个参数是变量名称,第二个参数是库名称,第三个参数是HINTS,第4个参数是路径,其它用法可以参考cmake文档

target_link_libraries (main ${TESTFUNC_LIB})把目标文件与库文件进行链接

3、实际项目的一个CMakeLists.txt

image.png
image.png
cmake_minimum_required (VERSION 3.0)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

add_compile_options(-std=c++11)

set(SRC_LIST  ${CMAKE_CURRENT_SOURCE_DIR}/src/XThreadPool.cpp 
              ${CMAKE_CURRENT_SOURCE_DIR}/src/XThread.cpp 
              ${CMAKE_CURRENT_SOURCE_DIR}/src/XServerTask.cpp 
              ${CMAKE_CURRENT_SOURCE_DIR}/src/XComTask.cpp 
              ${CMAKE_CURRENT_SOURCE_DIR}/src/XTools.cpp)
              
project (demo)

FIND_LIBRARY(Libevent libevent.dylib /opt/homebrew/Cellar/libevent/2.1.12/lib/)

add_library (xcom SHARED ${SRC_LIST})

target_link_libraries (xcom ${Libevent})
posted @ 2022-03-27 21:02  mengchao  阅读(96)  评论(0编辑  收藏  举报