本文用来记录基本的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官网

CMake入门实战的更多相关文章

  1. CMake 入门实战 | HaHack

    CMake 入门实战 | HaHack undefined

  2. C++ CMake 入门实战[转载]

    C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...

  3. CMake 入门实战【转】

    本文转载自:http://www.hahack.com/codes/cmake/ 什么是 CMake All problems in computer science can be solved by ...

  4. cmake 入门实战

    当你的程序只有一个源文件时,直接就可以用gcc命令编译它 g++ main.cc 这样会输出一个main.out https://www.hahack.com/codes/cmake/

  5. CMake入门-04-自定义编译选项

    工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! - 自定义编译选项 CMake 允许为项目增加编译选项,从而可以 ...

  6. CMake入门-03-还是HelloWorld

    工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-math 目录里的文件编译成静态库再由 main 函数调用 ...

  7. VScode 使用 CMake 入门

    参考 CMake 入门实战 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . 执行命令 cmake PA ...

  8. Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Hadooop 1.1 搭建环境 1.1.1 安装并设置maven 1. 下载mave ...

  9. Spark入门实战系列--10.分布式内存文件系统Tachyon介绍及安装部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Tachyon介绍 1.1 Tachyon简介 随着实时计算的需求日益增多,分布式内存计算 ...

随机推荐

  1. Java编程语言下Selenium 对于下拉框,单选,多选等选择器的操作

    WebElement selector = driver.findElement(By.id("Selector")); Select select = new Select(se ...

  2. WSL与Windows交互实践

    1. WSL是什么 2. WSL新特性 3. WSL管理配置 4. WSL交互 5. 解决方案  * 5.1 使用别名  * 5.2 多复制一份  * 5.3 重定向  * 5.4 symlink 6 ...

  3. Pyharm中关于“warning: Debugger speedups using cython not found”问题的解决

    在终端中输入 Python "/Applications/PyCharm CE.app/Contents/helpers/pydev/setup_cython.py" build_ ...

  4. Spring Security简明实践及相关国际化处理

    别人的都是最佳实践,因为我目前的设置没有按照参考文档推荐,还是采用DelegatingFilterProxy,所以我只能说简明实践.先贴我的applicationContext-security.xm ...

  5. "Uncaught object angular.js:36"诡异错误

    这个错误的调用顶级是jQuery.ready()函数,这个错误的原因是如果你在html元素里面定义ng-app,则在JavaScript里面必须初始化这个ngapp,初始化语句是: var AppNa ...

  6. Android Gradle使用总结

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/77678577 本文出自[赵彦军的博客] 其他 Groovy 使用完全解析 http ...

  7. 日常踩坑笔记:spring的context:property-placeholder标签

    背景: 原来的项目一直跑着没有问题,今天突然想在原有项目的基础上,加上redis进行数据的缓存,原来项目的架构就是传统的SSM框架,于是,大刀阔斧的开始改装了... 编写redis的配置文件——red ...

  8. 一道面试题引发的思考(C#值类型和引用类型)

    某年某月,笔者去面试招行的一个外包项目,辗转来到面试地点以后,面试官给了我一份试卷,试卷只有两道题目,其中一道是这样的: 阅读以下程序 class Program { struct Point { p ...

  9. 基于reflectasm打造自己的通用bean工具

    业务场景: 在很多的业务系统中,erp,crm系统中,有许多的对象信息都是拆开来的,例如一个商品,那可能他的商品名称,商品等主要信息放在一个表(衍生出来一个对象),他的附属信息(商品图片,规格,价格等 ...

  10. Spring Cloud Config - RSA简介以及使用RSA加密配置文件

    简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...