CMake的configure_file用法

本文详细介绍了CMake中的configure_file指令,包括其语法、参数、替换规则以及如何通过它在C/C++项目中动态生成配置文件,通过实例展示了其使用方法。
摘要由CSDN通过智能技术生成

前言

本篇文章讲解cmake的configure_file 指令

用法

cmake 中的 configure_file 指令通过读取输入文件中的内容,将 CMakeLists.txt 文件中的变量转变为 C/C++ 中可识别的宏定义,然后存入另一个文件中。其语法格式如下:

configure_file(<input> <output>
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
  • input:输入的文件名,通常为xxx-config.h.in,如果input是相对路径,相对的是当前的CMakeList.txt的目录,input必须是文件名而不能是目录名。如果input文件被修改,构建系统将重新运行 CMake 来重新配置该文件并再次生成output
  • output:输出的文件名,通常为 xxx-config.h,如果output是相对路径,相对的是当前的CMakeList.txt定义的二进制导出目录,如果output是目录名。则输出文件和input同名
  • 替换规则
    • COPYONLY:不进行转换,直接把输入文件的内容导入到输出文件
    • @ONLY:只识别@VAR@形式,对于${VAR}形式,会被识别为一个字符串原样定义

具体的替换规则如下:
cmake针对输入文件的每一行进行分析,读取一行

  • 如果是#cmakedefine VAR这种形式,cmake构建系统会查看在CMakeLists.txt 文件中,是否定义了变量VAR,如果定义了变量VAR,那么在转化出来的输出文件中就会存在 #define VAR 的语句。否则,在文件中就会显示 /*undef VAR*/
  • 如果是#cmakedefine01 VAR这种形式,cmake构建系统会根据 CMakeLists.txt 中VAR的值为ON或OFF,将其转换为 #define VAR 1#define VAR 0,如果没有定义VAR,会生成#define VAR 0
  • 如果是#cmakedefine VAR @VAR@或者#cmakedefine VAR ${VAR}这种形式,cmake构建系统会根据 CMakeLists.txt 中VAR的值定义宏#define VAR VAR的值,当然,如果变量VAR不存在的话,依然定义/*undef VAR*/

例子

下面是一个例子

// CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
set(VAR0 "VAR000")
set(VAR1 "VAR111")
set(VAR2 VAR222)
option(VARB "" ON)
configure_file(config.h.cmake config.h ESCAPE_QUOTES)
// config.h.cmake
#cmakedefine VAR0
#cmakedefine01 VARB
#cmakedefine VAR1 @VAR1@
#cmakedefine VAR2 ${VAR2}

构件后生成的config.h如下

#define VAR0
#define VARB 1
#define VAR1 VAR111
#define VAR2 VAR222
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值