Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows CMake替换目标生成的文件中的文本_Windows_Cmake - Fatal编程技术网

Windows CMake替换目标生成的文件中的文本

Windows CMake替换目标生成的文件中的文本,windows,cmake,Windows,Cmake,我有一个cmake target,它在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_PA

我有一个cmake target,它在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\u TEMP\u INSTALL\u PATH}/TOOL.ini的配置文件中的文本替换为“LICENSE\u file=Enter LICENSE server”文本行=30309@server"

以下命令将实现这一点,但这需要在安装工具目标构建后运行

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}")

如何将这些命令作为依赖项添加到安装工具?或者在windows上有更好的方法来实现这一点吗?

因为您希望在同一目标中按顺序运行两件事情,所以可以在同一目标中使用多个命令项。困难在于命令不能处理CMake代码,只能处理系统命令。典型的解决方案是在脚本文件的子shell中调用CMake:

COMMAND${CMAKE\u COMMAND}-p路径到脚本

因此,将文件修改命令放在源代码树中名为
license install.cmake
的文件中,并将另一个命令添加到
add\u custom\u目标中

提示:您可能会考虑“代码> AddiSufCuffic命令< /C>”,这样您就可以在安装的树中指定一个文件作为依赖项。这将允许CMake将已安装的工具视为构建产品,如果该工具已安装,则可以跳过安装步骤。您仍然需要一个依赖于您的命令输出的

add_custom_target
,才能正确地将其挂钩