configure_file 将文件复制到另一个位置并修改其内容。如下图,该命令将<input>文件复制到<output>文件,并替换<input>文件内容中引用为@VAR@或${VAR}的变量值为变量的当前值,如果未定义变量,则替换为空字符串。
语法:
configure_file(<input> <output>
[NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
FILE_PERMISSIONS <permissions>...]
[COPYONLY] [ESCAPE_QUOTES] [@ONLY]
[NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
示例程序:用configure_file命令将文件TutorialConfig.h.in的内容替换和复制到TutorialConfig.h文件中,TutorialConfig.h在目标include路径内被创建。
第一步:在项目文件夹 E:\TEMP\tutorial 内,创建如下3个文件:
1. TutorialConfig.h.in 内容如下:
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
#define Date ${Tutorial_Date}
复制该文件的内容时,@Tutorial_VERSION_MAJOR@ 、@Tutorial_VERSION_MINOR@ 和 ${Tutorial_Date} 将会被替换
2. CMakeLists.txt 内容如下:
cmake_minimum_required(VERSION 3.10)
# set the project name and version
project(Tutorial VERSION 2.3)
set(Tutorial_Date 20210713)
# add the executable
add_executable(Tutorial tutorial.cxx)
# configure a header file to pass some of the CMake settings
# to the source code
configure_file(TutorialConfig.h.in TutorialConfig.h)
# Since the configured file will be written into the binary tree
# we must add that directory to the list of paths to search for include files
target_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}"
)
(1)add_executable命令将文件 tutorial.cxx 内的源码编译生成可执行文件Tutorial.exe
(2)configure_file命令将输入文件TutorialConfig.h.in的内容复制到输出文件TutorialConfig.h中,并且输入文件中的@Tutorial_VERSION_MAJOR@ 和@Tutorial_VERSION_MINOR@将会被替换成项目的版本号 “2” 和 “3”,${Tutorial_Date} 被替换成“20210713”
3.tutorial.cxx 内容如下:
#include "TutorialConfig.h"
#include <iostream> // std::cout
#include <string> // std::stod
int main(int argc, char** argv) {
const double inputValue = std::stod(argv[1]);
if (argc < 3) {
// report version
std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
<< Tutorial_VERSION_MINOR << std::endl;
std::cout << "Usage: " << argv[0] << "("<<inputValue<<")" << std::endl;
std::cout << "Date: " << Date << std::endl;
return 1;
}
}
第二步:在visual studio code 内编译生成应用程序
1. 在 visual studio code 中“ File —— Open Folder —— ” 选中文件夹“E:\TEMP\tutorial”
2. 选择 visual studio 2019 作为编译器,build项目
3. build 成功后,项目文件夹多出<build>文件夹
<build>文件夹内容如下:
注意到:
(1) 文件 TutorialConfig.h ,它由命令 configure_file 得到,其内容如下(与文件TutorialConfig.h.in 对比):
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR 2
#define Tutorial_VERSION_MINOR 3
#define Date 20210713
(2)生成了可执行程序文件:Tutorial.exe
4. 测试可执行程序Tutorial.exe
(方式一):
1打开终端页,
2 “cd build”进入可执行程序所在文件夹“build”,
3输入:./tutorial.exe 5
4输出:
E:\TEMP\tutorial\build\Tutorial.exe Version 2.3
Usage: E:\TEMP\tutorial\build\Tutorial.exe(5)
Date: 20210713
输出结果如下:
(方式二)
1打开cmd.exe,
2进入路径 E:\TEMP\tutorial\build
3输入:tutorial 5
4输出:
tutorial Version 2.3
Usage: tutorial(5)
Date: 20210713
如下图所示:
END