windows - CMake 目标生成的文件中的替换文本
问题描述
我有 cmake 目标,它在 windows 上运行 setup.exe,它使用 add_custom_target 安装工具,如下所示
# TOOL_TEMP_INSTALL_PATH is the installation path which is set earlier in cmake
add_custom_target(
install_tool
COMMAND ${TOOL_TEMP_DIR}/setup.exe /DIR=${TOOL_TEMP_INSTALL_PATH}
)
安装后,我想替换位于 ${TOOL_TEMP_INSTALL_PATH}/tool.ini 的配置文件中的文本,将文本行“LICENSE_FILE=Enter License server”替换为“LICENSE_FILE=30309@server”
以下命令将实现此目的,但这需要在 install_tool 目标构建后运行。
file(READ "${TOOL_TEMP_INSTALL_PATH}/tool.ini" filedata)
string(REGEX REPLACE "LICENSE_FILE=Enter License server here"
"LICENSE_FILE=30309@server" filedata "${filedata}")
file(WRITE "${TOOL_TEMP_INSTALL_PATH}/tool.ini" "${filedata}")
如何将这些命令作为依赖项添加到 install_tool?或者有没有更好的方法在 Windows 上实现这一点?
解决方案
由于您希望作为同一目标的一部分按顺序运行两件事,因此您可以在同一目标中使用多个 COMMAND 条目。困难在于 COMMAND 不能处理 CMake 代码,而只能处理系统命令。典型的解决方案是在脚本文件的子 shell 中调用 CMake:
COMMAND ${CMAKE_COMMAND} -P path_to_script
因此,将您的文件修改命令放在源代码树中名为 的文件中license-install.cmake
,然后将另一个 COMMAND 添加到您的add_custom_target
提示:您可能会考虑add_custom_command
改为,因此您可以在已安装树中指定一个文件作为依赖项。这将允许 CMake 将已安装的工具视为构建产品,如果该工具已安装,则可以跳过安装步骤。你仍然需要add_custom_target
一个依赖于你的命令输出来正确连接它。
推荐阅读
- wordpress - WP Gutenberg 块回调 - 如何添加动态 CSS(到头部)?
- git - Git 无法正确显示 UTF-8 文件名
- azure-webjobs - 公开部署为 Web 作业的红隼服务器以进行外部交互
- python - Python SQLITE 更新子句未更新
- javascript - 如何使用javascript选择父母的兄弟姐妹的孩子(没有jquery)
- angular - 没有 BsModalService 提供者,我需要更改什么?
- html - HTML responsive navigation show first and last item always
- swift - 调用 ViewDidLoad 后立即使 Timer 开始计数
- c# - Specflow 场景在测试资源管理器中按字母顺序排序。有什么办法可以改变这个顺序?
- html - 从父母中排除孩子 svg mask-image