当前位置: 首页 > news >正文

CMake set_source_files_properties用法详解

set_source_files_properties 是 CMake 中用于为特定源文件设置属性的命令,可以控制编译选项、文件类型、依赖生成等。它支持设置头文件属性,但需注意头文件一般不参与编译(除非显式包含在 add_executable/add_library 中)。以下是具体用法和示例:

https://cmake.org/cmake/help/latest/command/set_source_files_properties.html


基本语法

set_source_files_properties(<files>... PROPERTIES <prop1> <value1> <prop2> <value2>...)

示例 1:设置单个文件的编译选项

# 为 main.cpp 添加特定的编译选项(如禁用警告)
set_source_files_properties(main.cpp PROPERTIES COMPILE_FLAGS "-Wno-unused-variable")

示例 2:标记头文件为“仅头文件”

# 头文件不参与编译,但需要包含在项目中(如 IDE 文件树显示)
set_source_files_properties(my_header.h PROPERTIES HEADER_FILE_ONLY TRUE)

示例 3:标记生成的文件(如自动生成的头文件)

# 告诉 CMake 该文件是生成的,避免检查文件是否存在
set_source_files_properties(generated_code.h PROPERTIES GENERATED TRUE)

示例 4:设置多个属性

# 为多个文件设置不同属性
set_source_files_properties(
  file1.cpp file2.cpp
  PROPERTIES
    COMPILE_FLAGS "-O3"      # 优化级别
    SKIP_AUTOMOC TRUE        # 跳过 Qt 的自动 moc 处理
)

示例 5:设置对象文件的输出名称

# 强制 file.cpp 编译后的对象文件名为 custom_name.obj
set_source_files_properties(file.cpp PROPERTIES OUTPUT_NAME "custom_name")

常见属性说明

属性名作用
COMPILE_FLAGS指定文件的编译选项
GENERATED标记文件为生成(避免 CMake 检查)
HEADER_FILE_ONLY标记文件为仅头文件(不参与编译)
SKIP_AUTOMOC跳过 Qt 的自动 moc 处理
OUTPUT_NAME自定义生成的对象文件/库的名称

注意事项

  1. 头文件是否需要设置属性?

    • 如果头文件被显式添加到 add_executable()add_library() 中,可以设置属性(如标记为 GENERATED)。
    • 一般情况,头文件通过 target_include_directories() 包含路径即可,无需额外设置。
  2. 现代 CMake 替代方案
    对于编译选项,更推荐使用 target_compile_options() 按目标设置:

    target_compile_options(my_target PRIVATE -Wno-unused-variable)
    

    set_source_files_properties 在需要文件级精细控制时仍然有效。

希望这些示例能帮助你灵活管理 CMake 项目的文件属性!

相关文章:

  • 机械革命 无界15X MT7922 debian12 蓝牙无法使用的研究
  • 【NLP】 18. Tokenlisation 分词 BPE, WordPiece, Unigram/SentencePiece
  • 【navicat16版本安装】
  • 基于FPGA的智能垃圾桶设计-超声波测距模块-人体感应模块-舵机模块 仿真通过
  • 服务器远程端口详解
  • MySQL与Oracle深度对比
  • 如何在英文学术写作中正确使用标点符号?
  • JavaScript 基础特性
  • XAMPP 下载、部署及使用入门
  • [redis进阶一]redis的持久化(2)AOF篇章
  • 设计模式(结构型)-桥接模式
  • Keil创建自定义的STM32标准库工程
  • jetpack之lifecycle的原理分析
  • 4.13学习总结
  • rag相关的技术
  • CSS 列表样式学习笔记
  • Spring Security 权限配置详解
  • 【5G-A学习】ISAC通信感知一体化学习小记
  • Elasticsearch搜索引擎 3(DSL)
  • 2025.4.7-2025.4.13文献阅读
  • 在美国,为什么夏季出生的孩子更容易得流感?
  • 新华时评:博物馆正以可亲可近替代“高冷范儿”
  • 长三角体育节回归“上海时间”,首次发布赛事旅游推荐线路
  • 霍步刚任辽宁沈阳市委书记
  • 广西百色“致富果”:高品质芒果直供香港,带动近五千户增收
  • 受贿1.29亿余元,黑龙江省原副省长王一新被判无期