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)