ZhiBing's blog(码上看世界) ZhiBing's blog(码上看世界)
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

ZhiBing Zheng

时间会回答成长
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Linux工具链

  • 构建

    • CMake

      • CMake Day 1 —— 初识 CMake
      • CMake Day 2 —— 指定 C/C++的标准
      • CMake Day 3 —— 编译二进制或库
      • CMake Day 4 —— 设置头文件路径和链接库
      • CMake Day 5 —— 从 CMakeLists.txt 传递变量到源文件
      • CMake Day 6 —— 安装规则(install rules)
      • CMake Day 7 —— option
      • CMake Day 8 —— 编译成一个库(利用OBJECT)
    • Makefile

  • 版本管理

  • IDE及工具

  • 基础领域
  • 构建
  • CMake
zhengzhibing
2022-06-10

CMake Day 5 —— 从 CMakeLists.txt 传递变量到源文件

# CMake Day 5 —— 从 CMakeLists.txt 传递变量到源文件

语法:

configure_file(<input> <output>
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NO_SOURCE_PERMISSIONS]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
1
2
3
4

将<input>文件复制到<output>文件,并在输入的文件内容中替换@VAR@或${VAR}的变量值,每个变量的引用都会被替换为该变量当前的值,如果变量未定义,则为空字符串。

<input>文件中定义变量替换的形式如下:

#cmakedefine VAR ...
1

这将会被替换成:

#define VAR ...
1

或者:

/* #undef VAR */
1

当input文件被修改时,需要运行 CMake 以重新配置文件。

  • <input>:输入文件的路径,相对路径是相对于CMAKE_CURRENT_SOURCE_DIR,必须是文件,不能是目录;
  • <output>:输入文件或目录的路径,相对路径是相对于CMAKE_CURRENT_BINARY_DIR,如果是现有的目录,则输出文件和输入文件同名;
  • COPYONLY: 表示复制文件,而不替换任何变量引用和其它内容;
  • ESCAPE_QUOTES: 表示用反斜杠替换任何引号;
  • @ONLY:仅仅替换@VAR@形式的变量引用;
  • NO_SOURCE_PERMISSIONS:不会将原始文件权限转移到副本,复制的文件权限默认 644,PS:有些 CMake 版本不支持这个参数;
  • NEWLINE_STYLE <style>:指定输出文件的换行形式;

CMAKE_CURRENT_BINARY_DIR:cmake 的构建目录;

示例:

cmake_minimum_required(VERSION 3.10.0)

project(demo)

include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

set(VAR1 "1222")
set(VAR2 2)
set(VAR3)
set(VAR4 "\"QAZ\"")
set(VAR5 "BABA")

configure_file(Config.h.in Config.h)

configure_file(Config.h.in Config1.h ESCAPE_QUOTES @ONLY NEWLINE_STYLE CRLF)
configure_file(Config.h.in ./ COPYONLY)
add_executable(demo main.cpp)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

https://github.com/AZMDDY/cmake-demo/tree/main/cmake-day-5 (opens new window)

#CMake
上次更新: 2022/06/11, 08:32:44
CMake Day 4 —— 设置头文件路径和链接库
CMake Day 6 —— 安装规则(install rules)

← CMake Day 4 —— 设置头文件路径和链接库 CMake Day 6 —— 安装规则(install rules)→

最近更新
01
HPE gen10 plus 安装ESXI 7
06-12
02
ESXI 7安装黑群晖
06-12
03
ESXI 7安装win10
06-12
更多文章>
Theme by Vdoing | Copyright © 2022-2024 ZhBing Zheng | 粤ICP备2022062743号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式