CMake入门实战

Posted lzm-cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake入门实战相关的知识,希望对你有一定的参考价值。

本文用来记录基本的Cmake用法,以一个实例,讲解如何通过cmake构建一个一个基本的工程,文件的目录如下:
技术分享图片
说明:

  • bin文件夹下的debug和release分别存放编译输出的文件和相关依赖的动态库。
  • common为公共目录,include为公共头文件,libs里面是公共静态库。
  • mysqlpp目录下是当前项目的源代码。
  • CMakeList.txt是用来编写组织工程结构配置的文件。

编写CMakeList.txt

CMakeList.txt的详细内容如下,每一个配置都有详细的说明,可以根据实际需求删减部分配置或者增添部分配置。这里的实例是生成一个动态库的

#需要cmake的最低版本
CMAKE_MINIMUM_REQUIRED (VERSION 3.5.2)

#设置一个变量作为工程名字以及输出文件名
SET ( MYSQLPP_LIBRARY_NAME "mysqlpp" )

PROJECT (${MYSQLPP_LIBRARY_NAME})

#头文件包含路径
INCLUDE_DIRECTORIES(
    common/include
    common/include/mysql
)

#预编译宏 所有宏都以 -D 开头
ADD_DEFINITIONS(
    -D_USRDLL  
    -DDLL_EXPORTS  
    -DUNICODE  
    -D_UNICODE  
    -DMYSQLPP_MAKING_DLL  
    -DHAVE_MYSQL_SSL_SET
)

#静态库库路径
LINK_DIRECTORIES(
    common/libs
)

#添加需要链接的静态库名称(此处添加的是存在debug版本的静态库)
SET(LINK_LIBRARY
    libmysql
)

#配置debug版本静态库的名字后面加 ‘d‘,区别debug与release版本,这里规则可能不一样,根据实际情况调整
set (LINK_LIST "")
foreach(x ${LINK_LIBRARY})
    list (APPEND LINK_LIST debug ${x}d optimized ${x})
endforeach()

#头文件
FILE(GLOB CURRENT_HEADERS "mysqlpp/*.h")
SOURCE_GROUP("Header Files" FILES ${CURRENT_HEADERS})

#源文件
FILE(GLOB SOURCES "mysqlpp/*.cpp")

#设置输出路径
set(LIBRARY_OUTPUT_PATH bin)

#指定输出静态库的名字
ADD_LIBRARY(${MYSQLPP_LIBRARY_NAME} SHARED 
    ${SOURCES} ${CURRENT_HEADERS}
)

#添加所有链接的静态库
target_link_libraries(
    ${MYSQLPP_LIBRARY_NAME}

    #只有release版本的库单独写到这里,就是debug与release均链接这个库,不做区分
    ws2_32          
    
    #存在debug与release两个版本的静态库直接引用上面经过处理的宏
    ${LINK_LIST} 
)

注意:

生成工程文件

以windows下生成指定版本的vs工程文件为例,讲解如何用命令行生成指定版本的vs工程。

  1. 打开cmd命令行,切换到CmakeList.txt所在的目录。
  2. 输入如下命令并执行:
    技术分享图片
    3.生成的vs解决方案如下:
    技术分享图片
    说明: -G表示生成的目标工程类型,这里指定的vs2008的工程,默认的32位工程,也可以通过参数指定要生成的工程位数为64为,具体参数如下:
    技术分享图片

到这里,一个简易的基本的cmake配置文件的框架就完成了。cmake功能非常强大,更复杂的功能参考CMake官网








以上是关于CMake入门实战的主要内容,如果未能解决你的问题,请参考以下文章

CMake入门实战

CMake快速入门教程-实战

CMake 快速入门

CMake 快速入门

CMake 快速入门

#yyds干货盘点#CMake项目编译实战