惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
N
Netflix TechBlog - Medium
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
IT之家
IT之家
博客园 - Franky
雷峰网
雷峰网
博客园 - 聂微东
腾讯CDC
M
MIT News - Artificial intelligence
B
Blog RSS Feed
博客园_首页
罗磊的独立博客
S
SegmentFault 最新的问题
I
InfoQ
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
D
Docker
宝玉的分享
宝玉的分享
B
Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

LanYunのBlog

优化macOS Dock栏的显示与隐藏 解决macOS全屏模式下某些情况显示原始鼠标指针的问题 Yarn从Classic迁移到Modern nginx自编译 用santa对二进制进行监控和授权 ESXI 8.0安装黑群晖DSM 7.x openwrt编译过程记录 编译monero For macOS ARM 自建busuanzi不蒜子平台统计平台 浅记博客更新日志 (机翻)Kubo配置文件 修改brew services中服务的启动参数 技术杂记📝 解决Surge模块不能同步问题 为Arch Linux配置邮件服务 自编译NutClient-ESXI,更改邮件逻辑 解决ESXI和群晖使用SSH密钥登录问题 为J4125软路由ESXI中群晖提供UPS服务 在arch linux上搭建rustdesk server 解决虚拟机扩容中GPT PMBR大小不符问题 搭建Tuic V5 优雅地为macOS提供python多版本的支持 修复root路径下文件权限问题 解决macOS 14上利用Whisky运行steam时有关问题 在macOS中用PhpStorm配置Xdebug调试 利用CloudFlare Workers快速自建一个IP获取器 如何自动续期证书? 从0开始速配VPS用于网站等 搭建一个基于ChatGPT的QQ机器人(Yunzai-Bot) For Mac 010 Editor For Mac 13.0.1 Crack 破解
CMake学习笔记📒
LanYun · 2022-05-18 · via LanYunのBlog

前言

本人一个小项目就是采用CMake来进行构建的.可以参考参考.顺便点个star🌟.

本文主要记录📝本人学习CMake中对与C和C++使用的一些知识点.方便日后复习.如有错误地方还请指正.


介绍

CMake是个一个开源跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unixmake相似,只是CMake的配置文件取名为CMakeLists.txt。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake和SCons等其他类似系统的区别之处。 CMake配置文件(CMakeLists.txt)可设置源代码或目标程序库的路径、产生适配器(wrapper)、还可以用任意的顺序建构可执行文件。CMake支持in-place建构(二进档和源代码在同一个目录树中)和out-of-place建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake也支持静态与动态程序库的建构。

“CMake”这个名字是”Cross platform Make”的缩写。虽然名字中含有”make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高端。 它可与原生建置环境结合使用,例如:make、ninja、苹果的Xcode与微软的Visual Studio。

安装&配置

官方地址下载对应系统和框架并安装即可.

Mac用户推荐:brew install cmake

安装完后,看一下版本号.

image-20220518173030976

确保不低于 3.22.4

Windows用户若提示找不到命令可能需要手动配置路径到PATH环境变量下.不过本人对Windows系统有很大意见,建议早日更换linux系统

image-20220518173152302

另外,我们需要确保系统内有C/C++的编译工具🔧(mac用户有Xcode就有C的工具🔧链了)

例如 在Linux下需安装gcc或clang等

因为CMake本身不带编译工具🔧.

知识点

语法

cmake_minimum_required(VERSION 3.10) 指定版本

project(armor) 工程名称

set(CMAKE_BUILD_TYPE RELEASE) 指定编译类型

include_directories(include) 添加头文件目录

file(GLOB SOURCE “src/*.cpp” “main.cpp”) 源文件

add_library(armor SHARED ${SOURCE}) 生成动态链接库

add_library(armor STATIC ${SOURCE}) 生成静态链接库

set(PROJECT_LINK_LIBS libarmor.so) 将库文件存到变量中

link_directories(/home/wenda/cmake/demo_4/build) 添加外部库的搜索路径

target_link_libraries(main ${PROJECT_LINK_LIBS}) 链接外部库文件

add_executable(main main.cpp) 将源文件生成可执行文件

示例Demo

命令cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release && cmake --build build --target all

直接拿我的一个推箱子小游戏项目CMakeLists.txt作为示例Demo吧~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
cmake_minimum_required(VERSION 3.22) 

project(PushBox
LANGUAGES C
VERSION 1.1.4
DESCRIPTION "免费,开源,推箱子小游戏.A Free, Open Source, PushBox Game."
HOMEPAGE_URL https://github.com/LanYunDev/PushBox
)

if (PROJECT_BINARY_DIR STREQUAL PROJECT_SOURCE_DIR)
message(WARNING "PROJECT_BINARY_DIR and PROJECT_SOURCE_DIR are the same. This is not recommended.")
endif ()

if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif ()

if (WIN32)
add_definitions(-DNOMINMAX -D_USE_MATH_DEFINES)
endif ()

if (NOT MSVC)
find_program(CCACHE_PROGRAM ccache)
if (CCACHE_PROGRAM)
message(STATUS "Found CCache: CCACHE_PROGRAM: ${CCACHE_PROGRAM}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM})
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_PROGRAM})
endif ()
endif ()


if (NOT DEFINED BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ON)
endif ()

set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)

find_package(Curses REQUIRED)

include_directories(${CURSES_INCLUDE_DIR})

file(GLOB SRC_FILES CONFIGURE_DEPENDS
"${PROJECT_SOURCE_DIR}/src/*.cpp"
"${PROJECT_SOURCE_DIR}/src/*.c"
"${PROJECT_SOURCE_DIR}/src/*.h"
)

add_executable(${CMAKE_PROJECT_NAME} ${SRC_FILES})

if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
target_link_libraries(${CMAKE_PROJECT_NAME} ${CURSES_LIBRARY})
ELSE ()
target_link_libraries(${CMAKE_PROJECT_NAME} -lncursesw)
endif ()

关于静态库,动态库哪些东西懒得写了.关于构建也是.

有机会再补充内容和更新吧~

  • WeChat

    WeChat

  • AliPay

    AliPay


相关推荐

cover