zoukankan      html  css  js  c++  java
  • 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. 输入如下命令并执行:

    1. 生成的vs解决方案如下:

      说明: -G表示生成的目标工程类型,这里指定的vs2008的工程,默认的32位工程,也可以通过参数指定要生成的工程位数为64为,具体参数如下:

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

  • 相关阅读:
    c++ 用宏代替常用的函数
    爬取网易云音乐(包括歌词和评论)
    三种常见的单例模式
    函数式编程filter和map的区别
    四种常见排序算法(快速,冒泡,插入,选择排序)
    6.微信撤回消息的获取
    5.微信拜年短信自动回复
    4.深拷贝和浅拷贝
    3.迭代器以及迭代器的作用
    2.生成器计算出斐波那契数列
  • 原文地址:https://www.cnblogs.com/lzm-cn/p/9094626.html
Copyright © 2011-2022 走看看