CMake:如何在make install之前执行一个命令?

xxhby3vn  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(346)

这是我安装配置文件的方式:

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命令依赖于它。任何建议将不胜感激!

kwvwclae

kwvwclae1#

看一下installSCRIPT版本:
SCRIPT和CODE签名:
install([[SCRIPT <file>] [CODE <code>]] [...])
SCRIPT表单将在安装过程中调用给定的CMake脚本文件。如果脚本文件名是相对路径,则将相对于当前源目录对其进行解释。CODE表单将在安装过程中调用给定的CMake代码。代码被指定为双引号字符串中的单个参数。
例如:

install(CODE "execute_process(\"./Convertor a.xml a-converted.xml\")")
install(FILES a-converted.xml DESTINATION ${INSTDIR})

确保在手册中 checkout entry for execute_process。还要注意,CODE参数中的宏扩展可能会有点棘手。检查生成的cmake_install.cmake在您的构建目录中,生成的代码将放置在那里。

svujldwt

svujldwt2#

我认为,如果您使用自定义命令和目标,您的特定情况会更好地工作,如下所示:

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是在你想要安装它的时候生成的。特别是,这两条规则确保了如果你对文件做了修改,它会被 * 重新编译 *。

相关问题