CMake使用小结

根据近期的项目开发中对CMake的使用进行一些总结。

CMake主要用于构建C++/C的工程项目,能自动配置依赖所依赖的头文件、.lib文件和.dll文件并且配置项目属性。如此,可以实现对项目工程的复用以提高开发效率。感觉CMake中很重要的一个点就是要明白相对路径的重要性。

1.设置wchar_t为内置类型为否

cpp 复制代码
ADD_DEFINITIONS (/Zc:wchar_t-)

2.添加头文件依赖的目录

cpp 复制代码
INCLUDE_DIRECTORIES(
    ${CMAKE_SOURCE_DIR}/YourHeaderFile
)

${CMAKE_SOURCE_DIR}为最高层的CMakeLists.txt所在位置。这么写表示你要依赖的头文件是放在最高层的CMakeLists.txt所在位置的YourHeaderFile文件夹下。

3.设置需要排除的文件夹并遍历排除

cpp 复制代码
set(EXCLUDED_DIRS "Hello" "World")
# 遍历排除的文件夹
foreach(dir ${EXCLUDED_DIRS})
	list(APPEND EXCLUDE_DIR_ARGS "--exclude-dir=${CMAKE_SOURCE_DIR}/${dir}")
endforeach()

如此设置,那么名为Hello跟World的文件夹及其中包含的文件都将不会被参与编译。上面也可以不遍历排除,直接一条一条排除也可以

4.FILE GLOB+链接.lib依赖

FILE GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件

cpp 复制代码
file(GLOB USER_LIBS_PATH ${CMAKE_SOURCE_DIR}/lib/*.lib)
target_link_libraries(${PROJECT_NAME} ${USER_LIBS_PATH})

如上语句将会把目录CMakeLists.txt所在位置下的lib文件夹中所有符合*.lib(通配符方式)结尾的文件存入USER_LIBS_PATH变量中。

target_link_libraries则是将匹配到的所有.lib文件链接到项目中。

可参考:cmake 遍历目录获取所有文件名 - 简书

5.file GLOB+file COPY构建.dll依赖

.dll的依赖主要放到和生成的可执行文件在一个目录下,这个时候就需要用copy把需要链接的.dll进行拷贝放置。

cpp 复制代码
file(GLOB USER_DLLS_PATH ${CMAKE_SOURCE_DIR}/dll/*.*)
file(COPY ${USER_DLLS_PATH} DESTINATION ${OUTPUT_DIR}/Debug)

如上代码段会将dll文件夹中的所有文件拷贝放到Debug文件当中。

6.设置预处理定义

主要是用target_compile_definitions。

总之CMake还有其他好多的功能,接下来还是需要边用边学了。

相关推荐
Highcharts.js16 分钟前
Highcharts Grid 表格/网格安装 |官方安装文档说明
开发语言·javascript·表格组件·highcharts·官方文档·安装说明·网格组件
Chary201634 分钟前
opengl 学习资料路径
c++·opengl
im_AMBER1 小时前
Leetcode 102 反转链表
数据结构·c++·学习·算法·leetcode·链表
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-企业级软件研发工程应用规范实现细节
大数据·开发语言·人工智能·spring boot
lly2024061 小时前
SQL SELECT 语句详解
开发语言
今儿敲了吗1 小时前
01|多项式输出
c++·笔记·算法
程序员Jared1 小时前
C++11—mutex
c++
superman超哥1 小时前
Rust 异步时间管理核心:Tokio 定时器实现机制深度剖析
开发语言·rust·编程语言·rust异步时间管理核心·tokio定时器实现机制·tokio定时器
朔北之忘 Clancy2 小时前
2025 年 9 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·数学·青少年编程·题解
玛丽莲茼蒿2 小时前
javaSE 集合框架(五)——java 8新品Stream类
java·开发语言