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

问题描述 投票:0回答:2

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

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

linux cmake installation
2个回答
11
投票

看看

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
在您的构建目录中,生成的代码将放置在其中。


2
投票

我认为如果您使用自定义命令和目标,您的具体情况会更好:

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) 进行更改,它会被重新编译

© www.soinside.com 2019 - 2024. All rights reserved.