这是我安装配置文件的方式:
file(GLOB ConfigFiles ${CMAKE_CURRENT_SOURCE_DIR}/configs/*.xml
${CMAKE_CURRENT_SOURCE_DIR}/configs/*.xsd
${CMAKE_CURRENT_SOURCE_DIR}/configs/*.conf)
install(FILES ${ConfigFiles} DESTINATION ${INSTDIR})
但是我需要在安装之前转换其中一个 xml 文件。有一个可执行文件可以为我完成这项工作:
./转换器a.xml a-converted.xml
如何在安装前自动转换xml文件?它应该是一个自定义命令或目标,安装依赖于它,我只是不知道如何使
install
命令依赖于它。任何建议将不胜感激!
SCRIPT
版本的install
:
脚本和代码签名:
install([[SCRIPT <file>] [CODE <code>]] [...])
SCRIPT 表单将在期间调用给定的 CMake 脚本文件 安装。如果脚本文件名是相对路径,则为 相对于当前源目录进行解释。代码 form 将在安装过程中调用给定的 CMake 代码。代码是 指定为双引号字符串内的单个参数。
例如:
install(CODE "execute_process(\"./Convertor a.xml a-converted.xml\")")
install(FILES a-converted.xml DESTINATION ${INSTDIR})
entry for execute_process
。另请注意,CODE
参数内的宏扩展要正确执行可能有点棘手。检查生成的 cmake_install.cmake
在您的构建目录中,生成的代码将放置在其中。
我认为如果您使用自定义命令和目标,您的具体情况会更好:
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/a-converted.xml
COMMAND ./Convertor a.xml a-converted.xml
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Convertor
)
add_custom_target(run ALL
DEPENDS ${CMAKE_BINARY_DIR}/a-converted.xml
COMMENT "Generating a-converted.xml" VERBATIM
)
install(
FILES ${CMAKE_BINARY_DIR}/a-converted.xml
DESTINATION ${INSTDIR}
)
注意:我没有所有详细信息,因此目录可能是 不完全是您想要的环境,尽管它是 在
${CMAKE_BINARY_DIR}
区域生成文件是个好主意。
这样您就可以确保文件
a-converted.xml
是在您想要安装时构建的。特别是,这两条规则确保如果您对原始文件 (a.xml) 进行更改,它会被重新编译。