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工程。
- 打开cmd命令行,切换到CmakeList.txt所在的目录。
- 输入如下命令并执行:
生成的vs解决方案如下:
说明: -G表示生成的目标工程类型,这里指定的vs2008的工程,默认的32位工程,也可以通过参数指定要生成的工程位数为64为,具体参数如下:
到这里,一个简易的基本的cmake配置文件的框架就完成了。cmake功能非常强大,更复杂的功能参考CMake官网。
CMake入门实战的更多相关文章
- CMake 入门实战 | HaHack
CMake 入门实战 | HaHack undefined
- C++ CMake 入门实战[转载]
C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...
- CMake 入门实战【转】
本文转载自:http://www.hahack.com/codes/cmake/ 什么是 CMake All problems in computer science can be solved by ...
- cmake 入门实战
当你的程序只有一个源文件时,直接就可以用gcc命令编译它 g++ main.cc 这样会输出一个main.out https://www.hahack.com/codes/cmake/
- CMake入门-04-自定义编译选项
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! - 自定义编译选项 CMake 允许为项目增加编译选项,从而可以 ...
- CMake入门-03-还是HelloWorld
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-math 目录里的文件编译成静态库再由 main 函数调用 ...
- VScode 使用 CMake 入门
参考 CMake 入门实战 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . 执行命令 cmake PA ...
- Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Hadooop 1.1 搭建环境 1.1.1 安装并设置maven 1. 下载mave ...
- Spark入门实战系列--10.分布式内存文件系统Tachyon介绍及安装部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Tachyon介绍 1.1 Tachyon简介 随着实时计算的需求日益增多,分布式内存计算 ...
随机推荐
- Go中string转[]byte的陷阱
Go中string转[]byte的陷阱html {overflow-x: initial !important;}#write, body { height: auto; }#write, #writ ...
- Opencv3.1+python2.7的CentOS7安装
http://blog.csdn.NET/daunxx/article/details/50506625 转载注释:有些包名和系统包名并不匹配,yum install 找不到的时候,可以yum sea ...
- TabLayout:另一种Tab的实现方式
http://blog.csdn.NET/aigestudio/article/details/47155769 在5.0以前我们想要实现像网易新闻客户端那样的的Tab可以有很多种选择: 比如古老的T ...
- Nginx 怎么给一台服务器,配置两个域名?详细的解说+截图教程
一. 环境.条件准备 一台云服务器(我的是腾讯的centos7) 至少两个域名.(我的是simuhunluo.xyz和simuhunluo.top.这两个域名之间没有任何关系,我是在阿里 ...
- PyQt5实现界面跳转
网上关于PyQt5的教程很少,特别是界面跳转这一块儿,自己研究了半天,下来和大家分享一下 一.首先是主界面 1 # -*- coding: utf-8 -*- # Form implementatio ...
- 用js来实现那些数据结构—目录
首先,有一点要声明,下面所有文章的所有内容的代码,都不是我一个人独立完成的,它们来自于一本叫做<学习JavaScript数据结构和算法>(第二版),人民邮电出版社出版的这本书.github ...
- 2、前端学习笔记之——css
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java(二、基础语法和基本数据类型)
Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...
- laravel5.5 延时队列的使用
队列这个知识相对比较冷门,因为平时的CURD基本用不到这个知识,今天用到了,所以就写个博客记录一下吧. 首先你得清楚要用什么驱动,除了database队列驱动(选择database驱动要php art ...
- 队列Queue和栈
1.队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素, 从另一段取出(poll)元素,队列遵循先进先出的原则. 2.J ...