CMake安装

ubuntu上直接执行 sudo apt install cmake 安装完成,可以通过cmake -version查看其版本

CMake常用命令

#正常命令是下面这样的 一共由6部分组成

#g++ -o 可执行文件/静态库/动态库 编译参数 源文件 头文件 库文件 链接的库

#cmake 其实就是解决这6的部分

(1)生成可执行文件

add_executable(源文件名字 源文件路径/源文件的变量)

(2)编译参数

set(CMAKE_<LANG>_FLAGS ${CMAKE_<LANG>_FLAGS} -g -O2)

在默认配置上加 -g -O2编译参数

(3)源文件添加

第一种方法:set(SRC_LISTS 源文件名字/源文件路径)

第二种方法: aux_source_directory(路径 SRC_LISTS)

将源文件加载到变量里面

(4)配置头文件的搜索路径

include_directories(路径);

(5)配置库文件路径

link_directories(路径)

(6)链接库文件

target_link_directories(程序名 链接的库名字)

(7)加载子目录

add_subdirectory(src)

主要用于大项目构建的时候,有多个CMakeKists

(8)上面的完整代码

#正常命令是下面这样的 一共由6部分组成
#g++ -o 可执行文件/静态库/动态库 编译参数 源文件 头文件 库文件 链接的库
#cmake 其实就是解决这6的部分
##(1)生成可执行文件
add_executable(源文件名字 源文件路径/源文件的变量)

##(2)编译参数
set(CMAKE_<LANG>_FLAGS ${CMAKE_<LANG>_FLAGS} -g -O2)
##在默认配置上加 -g -O2编译参数

##(3)源文件添加
第一种方法:set(SRC_LISTS 源文件名字/源文件路径)
第二种方法: aux_source_directory(路径 SRC_LISTS)
##将源文件加载到变量里面

##(4)配置头文件的搜索路径
include_directories(路径);

##(5)配置库文件路径
link_directories(路径)

##(6)链接库文件
target_link_directories(程序名 链接的库名字)

(9)其他参考

这个博主cmake命令写得挺好的,可以看看

标准开发项目文件

bin:存放二进制文件

build:存放cmake的中间文件

src:存放源文件

include:存放头文件

lib:存放库文件

thirdlib:第三方库文件

CMakeLists:cmake文件

autosh.sh:一键编译脚本

READMAD:类似说明文档

CMake模板

这里提供一个模板,可以完成标准的工程开发,在不同工程里面只需要改一些变量名字即可,简单易便。

 父文件的

#版本号
cmake_minimum_required(VERSION 3.0)
#项目文件名
project(chat)

# 配置编译选项
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)

# 配置最终的可执行文件输出的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# 配置头文件的搜索路径 ${PROJECT_SOURCE_DIR} 工程文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/server)
include_directories(${PROJECT_SOURCE_DIR}/include/server/db)
include_directories(${PROJECT_SOURCE_DIR}/include/server/model)
include_directories(${PROJECT_SOURCE_DIR}/include/server/redis)
include_directories(${PROJECT_SOURCE_DIR}/thirdparty)
link_directories(/usr/lib64/mysql)


# 加载子目录
add_subdirectory(src)

 src文件下有server和client文件

add_subdirectory(server)
add_subdirectory(client)

 server文件下的CMakeLists

aux_source_directory(. SRC_LIST)
aux_source_directory(./db DB_LIST)
aux_source_directory(./model MODEL_LIST)
aux_source_directory(./redis REDIS_LIST)

# 指定生成可执行文件
add_executable(ChatServer ${SRC_LIST} ${DB_LIST} ${MODEL_LIST} ${REDIS_LIST})
# 指定可执行文件链接时需要依赖的库文件
target_link_libraries(ChatServer muduo_net muduo_base mysqlclient hiredis pthread)

client下可执行文件

# 定义了一个SRC_LIST变量,包含了该目录下所有的源文件
aux_source_directory(. SRC_LIST)

# 指定生成可执行文件
add_executable(ChatClient ${SRC_LIST})
# 指定可执行文件链接时需要依赖的库文件
target_link_libraries(ChatClient pthread)