CMake使用file(GLOB ...)需要注意的问题

news/2024/7/7 22:52:42

文章目录

  • 基本语法
  • 使用例子
  • 潜在的问题
  • 大型项目中推荐的用法

file(GLOB ...) 命令用于获取匹配指定模式的文件列表。在 CMake 中,file(GLOB ...) 命令的一种常见用法是用于收集源文件列表,例如 C++ 源文件(.cpp)和 C 源文件(.c)。然而,需要注意一些潜在的问题,特别是在大型项目中。

基本语法

file(GLOB variable [LIST_DIRECTORIES true|false] [RELATIVE path] [CONFIGURE_DEPENDS] [globbingexpressions]...)

其中:

  • variable 是一个存储匹配文件列表的变量名。
  • LIST_DIRECTORIES 是一个可选的参数,用于指定是否包含目录,默认为 true
  • RELATIVE path 是一个可选的参数,用于指定相对路径,文件匹配将从这个相对路径开始。
  • CONFIGURE_DEPENDS 是一个可选的参数,用于指定是否在构建时重新计算文件依赖关系。

使用例子

以下是一个使用 file(GLOB ...) 命令获取 C++ 和 C 源文件列表的例子:

file(GLOB CPP_SOURCES *.cpp)
file(GLOB C_SOURCES *.c)

# 将 C++ 和 C 源文件合并到一个变量中
set(SOURCES ${CPP_SOURCES} ${C_SOURCES})

# 在 add_executable 或 add_library 中使用这个变量
add_executable(my_executable ${SOURCES})

潜在的问题

虽然使用 file(GLOB ...) 简便,但有一些潜在的问题:

  1. 不会自动检测新增或删除的文件: 使用 file(GLOB ...) 时,CMake 不会自动检测源文件的变化,因此在添加或删除源文件时,需要手动重新运行 CMake。

  2. 不建议在大型项目中使用: 对于大型项目,由于可能包含大量的源文件,使用 file(GLOB ...) 可能会导致性能问题。

大型项目中推荐的用法

在大型项目中,推荐使用显式列出源文件的方式,例如:

set(SOURCES
    src/file1.cpp
    src/file2.cpp
    src/file3.cpp
    # ...
    src/main.cpp
)

add_executable(my_executable ${SOURCES})

这样可以更明确地指定源文件,避免潜在的问题。


http://lihuaxi.xjx100.cn/news/1830309.html

相关文章

React Native 源码分析(五)—— Fabric创建View的过程

这篇文章详细分析一下,在React Native 新架构下,Fabric是如何创建View的,从React层发送把View信息到原生端开始分析。说明一点,React 层fiber的创建更新过程,不属于Fabric。其中Yoga的绘制过程不会太详细,只会给出大概流程,像布局缓存这些。文章的重点是帮你理解Fabric的…

python-爬楼梯

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 输入格式 一个整数。 输出格式 一个整数。 输入/输出样例 输入1 2 输出1 2 解题思路: 这是一个经典的动态规划问题…

HCIA-RS基础-静态路由协议

摘要:静态路由是一种在网络中广泛应用的路由选择方案,它以其简单的配置和低开销而备受青睐。本文将介绍静态路由的配置方法、默认路由的设置、路由的负载分担和备份策略。通过学习本文,希望可以你能够掌握静态路由的基本概念和在华为模拟器中…

开源语音大语言模型来了!阿里基于Qwen-Chat提出Qwen-Audio!

论文链接:https://arxiv.org/pdf/2311.07919.pdf 开源代码:https://github.com/QwenLM/Qwen-Audio 引言 大型语言模型(LLMs)由于其良好的知识保留能力、复杂的推理和解决问题能力,在通用人工智能(AGI&am…

flutter编译和构建鸿蒙应用程序(windows环境)

flutter编译和构建鸿蒙应用程序(windows环境) 问题背景 针对 OpenHarmony 的 Flutter 版本已经开源,参考 https://gitee.com/openharmony-sig/flutter_flutter。 本文为实践该流程,实现flutter打包鸿蒙hap包的流程。目前流程已经…

C语言每日一题(37)两数相加

力扣网 2 两数相加 题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&a…

安卓使用集锦

Android Studio 怎么连接MUMU模拟器并永久使用 (10条消息) Android Studio 怎么连接MUMU模拟器并永久使用_林池的博客-CSDN博客_android studio连接mumu模拟器 系统篇 WindowManager与LayoutParams:Android P下WindowManager与LayoutParams的详解 - 掘金 UI组件…