在cmakelist中不编译某个文件

news/2025/2/3 16:32:40/文章来源:https://www.cnblogs.com/chentiao/p/18697551

在 CMake 中,如果你想让某个源文件不被编译,有多种方法可以实现。以下是常见的几种方式:


1. 从目标的源文件列表中移除

CMake 中,源文件通常在 add_executable 或 add_library 中被添加。只需不将特定文件添加到这些命令中即可。

示例:

set(SOURCESmain.cppfile1.cppfile2.cpp
)# 从源文件列表中移除 file2.cpp
list(REMOVE_ITEM SOURCES file2.cpp)add_executable(MyApp ${SOURCES})

2. 使用条件控制文件的编译

通过设置条件来控制是否包含某个文件。

示例:

set(USE_FILE2 OFF) # 控制开关set(SOURCESmain.cppfile1.cpp
)if(USE_FILE2)list(APPEND SOURCES file2.cpp)
endif()add_executable(MyApp ${SOURCES})

将 USE_FILE2 设置为 ON 时才会编译 file2.cpp


3. 设置特定文件的编译选项禁用

如果不希望完全移除文件,而只是暂时禁止其被编译,可以使用目标属性 EXCLUDE_FROM_ALL 或 SKIP_PRECOMPILE_HEADERS

示例:

set_source_files_properties(file2.cpp PROPERTIES EXCLUDE_FROM_ALL TRUE)

这样 file2.cpp 会被忽略,但文件仍然保留在项目中。


4. 使用目标的子目录隔离

如果需要更精确地控制某个文件的编译,可以通过子目录或分组的方式来隔离。

示例:

# 主 CMakeLists.txt
add_subdirectory(src)# src/CMakeLists.txt
set(SOURCESmain.cppfile1.cppfile2.cpp
)# 排除 file2.cpp
list(REMOVE_ITEM SOURCES file2.cpp)add_executable(MyApp ${SOURCES})

5. 使用 set_target_properties 排除

可以通过目标属性控制文件是否参与构建。

示例:

add_executable(MyApp main.cpp file1.cpp file2.cpp)# 排除 file2.cpp
set_source_files_properties(file2.cpp PROPERTIES HEADER_FILE_ONLY TRUE)

6. 动态生成 CMake 文件

如果你的项目需要更复杂的控制,可以动态生成一个包含目标定义的 CMake 文件,并在条件满足时进行调用。

示例:

if(SOME_CONDITION)include(files_to_build.cmake)
endif()

推荐方式

  • 如果仅仅是临时排除文件,使用 移除文件列表(方法 1 或 2) 是最简单直接的。
  • 如果是复杂项目,建议结合条件控制(方法 2)和分组管理(方法 4)以保证项目的可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878299.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题解:P11637 Mod

题解:P11637 Mod 题目传送门 思路 一种比较简单的方法。 根据题意,我们可以发现在若干次操作后 \(a\) 能变成 \(0\) 的情况下,操作次数为 \(p-a\)。因为 \(b\) 的操作次数与 \(a\) 相同,所以 \(b\) 的值为 \(b-(p-a)\)。因为题面中要求 \(b\) 为一个自然数,所以自然就分成…

如何在markdown中写出横线除号

在 Markdown 中,您可以使用支持 LaTeX 数学公式的环境来表示“除数在上面,被除数在下面”的数学公式形式。以下是具体方法: 1. 使用分数形式 用 LaTeX 的 \frac 表达分数(除号的形式): 块级公式: $$\frac{a}{b}$$内联公式: $\frac{a}{b}$2. 使用纯文本的替代表示法 如果…

彻底搞懂分布式事务 XA 模式

原文地址: https://developer.aliyun.com/article/783796 简介: XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库,比如 oracle、DB2 都是支持 XA 协议的。作者 | 朱晋君来源 | 阿里巴巴云原生…

.net6-jwt实现认证和自定义策略授权

场景 客户端根据用户名和密码访问登录接口获取token,服务端登录接口获取账号和密码进行验证,获取用户的角色,若角色是超级管理员则只能授权访问标记为超级管理员的接口,若角色是管理员则只能授权访问标记为管理员的接口。 实现JWT认证 安装JWT包 Microsoft.AspNetCore.Auth…

「ZJOI2017」树状数组 题解

前言 题目链接:洛谷;UOJ;LOJ。 UOJ 上有很强的数据。 题意简述 yzh 做 OI 题维护序列 \(\{a_n\}\)。 她实现了一个后缀和查询函数 \(\displaystyle f(x) = \begin{cases} 0 & \text{ if } x=0 \\ \sum\limits_{i=x}^n a_i & \text{ otherwise } \end{cases}\),和…

什么是SDK?

1. 什么是SDK?1.1. SDK的定义 1.2. SDK的组成 1.3. 举例说明1.3.1. 【示例一】 OpenCV 1.3.2. 【示例二】 JDK 1.3.3. 【示例三】微信SDK2. SDK与API2.1. 什么是API? 2.2. SDK与API的关系3. 什么是SDK开发?3.1. SDK开发包含哪些过程? 3.2. SDK开发的目标是什么? 3.3. SDK开…

小蚁摄像头通过rclone+alist实现监控视频自动上传至云盘

最近,我才发现我白嫖的一刻相册空间才到5g于是就想着把监控录制的视频全传到里面可是,这么搞好像有点麻烦,能不能让我的摄像头自己上传呢? 我的摄像头的型号是小蚁 1080p,刷入了yi-hack-v5 alist 开启ftp yi-hack-v5 ftp界面结果发现不行,放弃了 又看到这位老哥的samba方…

材料检测取样手册系统

为方便查询,特写了查询系统,支持桌面版和网页版,支持Excel导入数据库,支持数据库导出Excel,支持数据库备份,支持恢复数据库。数据库为MySQL

《操作系统真象还原》第十二章 进一步完善内核

本文是对《操作系统真象还原》第十二章学习的笔记,欢迎大家一起交流,目前所有代码已托管至 fdx-xdf/MyTinyOS 。第十二章 进一步完善内核 本文是对《操作系统真象还原》第十二章学习的笔记,欢迎大家一起交流,目前所有代码已托管至 fdx-xdf/MyTinyOS 。 实现系统调用 getpid…

深度学习(RNN,LSTM,GRU)

三个网络的架构图: RNN:LSTM:GRU:特性对比列表:特性RNNLSTMGRU门控数量无3门(输入/遗忘/输出)2门(更新/重置)记忆机制 仅隐藏状态ht显式状态Ct + 隐藏状态ht隐式记忆(通过门控更新状态)核心操作 直接状态传递门控细胞状态更新 门控候选状态混合 计算复杂度O(d2)(1组权…

AI定制祝福视频,广州塔、动态彩灯、LED表白,直播互动新玩法(附下载链接)

在追剧的时候经常能看到一些浪漫的告白桥段,男主用圣诞彩灯表白、用城市标志性建筑的LED表白,或者在五光十色的烟花绽放后刻下女主角的名字,充满了仪式感和氛围感~现在,这样的表白效果用AI软件就能实现了,在社交平台上甚至还出现了类似的直播内容,观众送热气球或者其他礼…