欢迎指正

CMake :

  A、download : https://cmake.org/download/

  B、tutorial: https://cmake.org/cmake-tutorial/

说明:

  我目前使用的是最新版:3.18 。

0、序言

  A、Cmake可配置生成项目

  B、项目可以是库文件或者可执行文件

  C、仅为参考,好记性不如烂笔头。

1、指定CMake版本相关 cmake_minimum_required

cmake_minimum_required(VERSION 3.1)

  可以用GUI查看版本或者其他方式

  

  上面的示例中,3.1 可以改,其他的,照写。

2、指定工程名project

# 1. set name
project(lib_udp)

  这里的 lib_udp为项目名,自定义即可。

3、aux_source_directory

  一个项目可能有多个头文件或者源文件,但是不想一个个的写,这时候,aux_source_directory可以很好的解决你的问题,可以用下面的方式

# 2. to get all source files
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src udp_src)

4、指定项目头文件搜索路径: include_directories

  这里指定的是目录,不是文件。示例:

1 include_directories(
2 "${CMAKE_CURRENT_SOURCE_DIR}/include"
3 "${CMAKE_CURRENT_SOURCE_DIR}/ext/spdlog-1.x/include"
4 )

5、设置选项option

  有了这个, 非常方便编写CMake相关的代码,示例,

1 option(example_shared             "an example to show how to use dynamic library" OFF)
2 option(lib_shared "to generate dynamic library" OFF)
3 option(lib_mfc "to generate a dynamic library to support MFC" ON)
4 option(lib_static "an example to show how to use dynamic library" OFF)

  option(变量名   描述字符串       状态)

  状态: ON / OFF

  有了这个,用GUI 配置就会显示如下:

  ON - 勾选,  OFF - 不勾选

  配置一条option, 这里就会显示一项。

6、创建库项目 add_library

  语法示例如下:

add_library( lib_udp_static STATIC ${udp_src} )

  第一个参数: 项目名 , 第二个参数: 动态库(SHARED)还是静态库(STATIC), 第三个参数:源文件

7、链接库 link_libraries

  当项目需要连接到系统库时,link_libraries 就登场了, 语法示例:

link_libraries(ws2_32)

  参数时 系统库的名字

8、生成可执行程序项目add_executable

  当项目生成的结果时一个可执行程序时,用add_executable指定。

add_executable(exam_lib_dynamic ${exam_src})

  第一个参数: 项目名,  第二个参数, 源文件

10、条件语句

  关键字: if else elseif  endif, 使用示范

  if (WIN32)
link_libraries(ws2_32)
elseif (APPLE)
link_libraries(pthread)
elseif (UNIX) endif (WIN32)

--------------- 一个 完整的CMAKE 演示------------------------

  1 cmake_minimum_required(VERSION 3.1)
2
3
4 SET(CMAKE_C_COMPILER /usr/bin/clang)
5 SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
6
7 # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -lrt -D_GLIBCXX_USE_NANOSLEEP")
8 add_definitions(-std=c++11)
9
10
11
12 # ---------------------------------------------------------------------------------------------------
13 # 1. set name
14 project(lib_udp)
15
16
17
18
19 # ---------------------------------------------------------------------------------------------------
20 # 2. to get all source files
21 aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src udp_src)
22
23
24
25
26 # ---------------------------------------------------------------------------------------------------
27 # 3. to attach to path of includes direcotries
28 include_directories(
29 "${CMAKE_CURRENT_SOURCE_DIR}/include"
30 "${CMAKE_CURRENT_SOURCE_DIR}/ext/spdlog-1.x/include"
31 )
32
33
34
35 # ---------------------------------------------------------------------------------------------------
36 #4. set some options
37 option(example_shared "an example to show how to use dynamic library" OFF)
38 option(lib_shared "to generate dynamic library" OFF)
39 option(lib_mfc "to generate a dynamic library to support MFC" ON)
40 option(lib_static "an example to show how to use dynamic library" OFF)
41
42
43
44 set(headers
45 ${CMAKE_CURRENT_SOURCE_DIR}/include/udp/udp_socket_imp.h
46 ${CMAKE_CURRENT_SOURCE_DIR}/include/udp/udp_wsa.h
47 ${CMAKE_CURRENT_SOURCE_DIR}/include/udp/udpsocket_interface.h
48 )
49
50
51 SOURCE_GROUP("Header Files" FILES ${headers})
52
53 # ---------------------------------------------------------------------------------------------------
54 #5. dynamic library program
55 if(lib_shared)
56 # 5.1 to link library
57 if (WIN32)
58 link_libraries(ws2_32)
59 elseif (APPLE)
60 link_libraries(pthread)
61 elseif (UNIX)
62
63 endif (WIN32)
64
65 # 5.2 to create static library
66 if(lib_static)
67 add_library( lib_udp_static STATIC ${udp_src} )
68 endif(lib_static)
69
70 # 5.3 default to create dynamic library
71 add_library( lib_udp_shared SHARED ${udp_src} )
72
73 # 5.4 set others
74 set_property(TARGET lib_udp_shared PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR})
75 endif(lib_shared)
76
77
78
79 # ---------------------------------------------------------------------------------------------------
80 #6. to support MFC
81 if(lib_mfc)
82
83 # 6.1 set some flags
84 if(WIN32)
85 link_libraries(ws2_32)
86 # set charators unicode
87 Add_Definitions(-DUNICODE -D_UNICODE)
88 Add_Definitions(-D_AFC_DLL)
89 SET(CMAKE_MFC_FLAG 2)
90 endif(WIN32)
91
92 # 6.2 to create an tatic library
93 if(lib_static)
94 add_library( mfc_lib_udp_static STATIC ${udp_src} )
95 endif(lib_static)
96
97 #6.3 to create dynamic library
98 add_library( mfc_lib_udp_shared SHARED ${udp_src} )
99
100 # 6.4 set others
101 set_property(TARGET mfc_lib_udp_shared PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR})
102
103 #6.5
104 if(lib_static)
105 SET_TARGET_PROPERTIES (mfc_lib_udp_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
106 endif(lib_static)
107
108
109 SET_TARGET_PROPERTIES (mfc_lib_udp_shared PROPERTIES CLEAN_DIRECT_OUTPUT 1)
110 endif(lib_mfc)
111
112
113
114
115
116
117
118 # ---------------------------------------------------------------------------------------------------
119 #7. an example , to show how to use dynamic libary
120 if (example_shared)
121 #7.1 set src path
122 set (exam_src
123 ${CMAKE_CURRENT_SOURCE_DIR}/example/main.cpp
124 )
125
126 if(WIN32)
127 #7.2 set library path
128 link_directories(${CMAKE_CURRENT_SOURCE_DIR}/build/Debug)
129 link_directories(${CMAKE_CURRENT_SOURCE_DIR}/build/Release)
130 endif(WIN32)
131
132 # 7.3 to get an executable program
133 add_executable(exam_lib_dynamic ${exam_src})
134
135
136 #7.4 to link library
137 target_link_libraries(exam_lib_dynamic lib_udp_shared)
138 endif(example_shared)
139
140
141
142
143
144 #------------------------------------------------------------------------------------
145
146 if(WIN32)
147 #
148 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/build/Debug)
149 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/build/Release)
150
151 #
152 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/buiold/lib/Debug)
153 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/buiold/lib/Release)
154 endif(WIN32)

自己常用的CMake用法总结的更多相关文章

  1. web报表工具FineReport常用函数的用法总结(日期和时间函数)

    web报表工具FineReport常用函数的用法总结(日期和时间函数) 说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd.而且必须用英文环境下双引号(" " ...

  2. pm2常用的命令用法介绍

    pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...

  3. [Python爬虫] 之六:Selenium 常用控件用法

    Selenium 常用控件用法 1.文本框 上图中,如何定位搜索文本框,并输入搜索内容进行搜索 首先:利用方法 find_element_by_xpath定位元素:inputElements = se ...

  4. SpringBoot入门系列(五)Thymeleaf的常用标签和用法

    前面介绍了Spring Boot 中的整合Thymeleaf .不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/16577 ...

  5. cmake用法及常用命令总结(全)

    CMakeLists.txt 的语法比较简单,由命令.注释和空格组成,其中命令是不区分大小写的.指令是大小写无关的,参数和变量是大小写相关的.但推荐全部使用大写指令.符号 # 后面的内容被认为是注释. ...

  6. cmake用法及常用命令总结

    CMakeLists.txt 的语法比较简单,由命令.注释和空格组成,其中命令是不区分大小写的.指令是大小写无关的,参数和变量是大小写相关的.但推荐全部使用大写指令.符号 # 后面的内容被认为是注释. ...

  7. Cmake用法

    目录 1,Cmake introduce 1.1 常用的目录结构 2,CMakeLists.txt文件的写法 Cmake 常用命令 Scripting Commands set include Pro ...

  8. uboot的常用命令及用法

    转自:https://blog.csdn.net/jklinux/article/details/72638830 https://blog.csdn.net/dagefeijiqumeiguo/ar ...

  9. CMake 用法导览

    Preface : 本文是CMake官方文档CMake Tutorial (http://www.cmake.org/cmake/help/cmake_tutorial.html) 的翻译.通过一个样 ...

随机推荐

  1. 洛谷 P3270 - [JLOI2016]成绩比较(容斥原理+组合数学+拉格朗日插值)

    题面传送门 考虑容斥.我们记 \(a_i\) 为钦定 \(i\) 个人被 B 神碾压的方案数,如果我们已经求出了 \(a_i\) 那么一遍二项式反演即可求出答案,即 \(ans=\sum\limits ...

  2. 如何反向推断基因型文件中的参考碱基(REF/ALT)?

    目录 需求 解决 方法一 方法二 需求 客户随手丢来一个基因型文件,类似于hapmap格式,只是少了中间多余的那几列,像这种类hapmap格式文件,往往是芯片数据. 这样的数据因为缺乏等位基因:参考碱 ...

  3. 【机器学习与R语言】11- Kmeans聚类

    目录 1.理解Kmeans聚类 1)基本概念 2)kmeans运作的基本原理 2.Kmeans聚类应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解Km ...

  4. matplotlib 画饼图

    有个瑕疵,某一块儿比例过小时,文字会重叠. 1 def pizza(data,labs,title): 2 import matplotlib 3 import matplotlib.pyplot a ...

  5. 33. Implement strStr()

    http://blog.csdn.net/justdoithai/article/details/51287649 理解与分析 Implement strStr() My Submissions Qu ...

  6. 21-Add Two Numbers-Leetcode

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  7. 关于latex简历几个非常有用的命令

        大家知道latex是最好的排版系统,用来写论文,排版非常漂亮,用来做简历可以提升逼格,下面介绍几个有用的命令 几个有用的命令 section.cventry.cvitem.cvlistit ...

  8. python第三天 列表和元组

    枚举 for in enumerate 循环输出字符串的内容并且输出它的索引信息: #判断索引为5的字符串是不是"您" is in Python提供了⼤量的内置数据结构,包含了列表 ...

  9. 学习java的第八天

    一.今日收获 1.学习完全学习手册上2.3转义字符与2.4运算符两节 二.今日难题 1.没有什么难理解的问题 三.明日目标 1.哔哩哔哩教学视频 2.Java学习手册

  10. RTSP, RTP, RTCP, RTMP傻傻分不清?

    RTSP基于TCP传输请求和响应报文,RTP基于UDP传输流媒体数据,RTCP基于UDP传送传输质量信息(如丢包和延迟). 比如喀什一个局域网内10个人同时点播广州的同一个源,喀什和广州之间就要传10 ...