CMake详细解析及使用步骤

1、CMake概念

CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。

2、CMake使用步骤

(一)编写CMakeLists.txt文件。
(二)创建一个build目录,用来存放cmake生成的文件。(这一步非必须)
(三)cd进入build目录下,执行cmake .. 命令,将CMakeLists.txt文件转化为make所需的makefile文件,
          其中路径 .. 表示CMakeLists.txt所在目录(路径可以根据自己CMakeLists.txt所在目录更改)。
(四)在build目录下,执行make命令,生成目标可执行文件。(注意:make命令要在cmake生成的makefile文件所在目录下执行,
我这里生成的makefile文件在build目录下。)

3、编写CMakeLists.txt文件

# 1. 声明cmake的最低版本要求(必须)
cmake_minimum_required ( VERSION 2.8 )
# 2. 添加c++11标准支持(必须)
set ( CMAKE_CXX_FLAGS "-std=c++11" )
# 3. 声明一个cmake工程
PROJECT ( rpt_main )
# 4. 添加头文件搜索路径
#注意:cmake系统预定义变量PROJECT_SOURCE_DIR,为包含PROJECT()命令的最近一个CMakeLists.txt文件所在的文件夹路径
include_directories(
${PROJECT_SOURCE_DIR}/../include/mq
${PROJECT_SOURCE_DIR}/../include/incl
${PROJECT_SOURCE_DIR}/../include/rapidjson )
# 5. 通过设定SRC变量将源代码.c/.cpp文件路径存放在SRC变量中如果有多个可以直接在后面继续添加
set(
SRC
${PROJECT_SOURCE_DIR}/../include/incl/tfc_file.cpp
...
路径
...
$ { PROJECT_SOURCE_DIR } / AgentSysTop_5 . cpp
# 6. 创建共享库/静态库
(一)# 设置路径(下面生成共享库/静态库的路径)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY  ${PROJECT_SOURCE_DIR}/lib)
# 即生成的共享库/静态库在工程文件夹下的lib文件夹中
#注意:cmake系统预定义变量CMAKE_LIBRARY_OUTPUT_DIRECTORY: 设置定动态库或者静态库的输出目录。
(二)#定义变量存放共享库/静态库名称
    set(LIB_NAME my_lib)
(三)# 创建共享库/静态库(把工程内的cpp文件都创建成共享库文件,方便通过头文件来调用)
          # 也可以专门写cmakelists来编译一个没有主函数的程序来生成共享库,供其它程序使用
          # SHARED为生成动态库,STATIC为生成静态库
    
    add_library(${LIB_NAME}  STATIC ${SRC})  #我这里是生成静态库
# 7. 链接库文件
# 把刚刚生成的${LIB_NAME}库和所需的其它库链接起来
# 如果需要链接其他的动态库,-l后接去除lib前缀和.so后缀的名称,以链接
# libpthread.so 为例,-lpthread
target_link_libraries(${LIB_NAME}  -lpthread dl)
# 8. 编译主函数,生成可执行文件
(一)# 先设置路径
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY  ${PROJECT_SOURCE_DIR}/bin)
     
    #注意:cmake系统预定义变量CMAKE_RUNTIME_OUTPUT_DIRECTORY: 设置可执行文件的路径(指make执行产生的可执行文件)。
(二)# 生成可执行文件
add_executable(${PROJECT_NAME} ${SRC})
#注意:${PROJECT_NAME}变量为cmake预定义的,取工程名称
   
(三)# 这个可执行文件所需的库(一般就是刚刚生成的工程的库咯)
target_link_libraries(${PROJECT_NAME}  pthread dl ${LIB_NAME})

4、生成makefile文件

(一)进入build目录

(二)执行命令 cmake ..


5、执行make命令,生成目标可执行文件

make

结束