安装目标的cmake运行脚本?

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

我有一个项目,其中“安装”代码并不像复制一些文件那么简单。使用传统的 Makefile,我只需创建一个

make install
目标,该目标运行一系列 shell 命令来执行我需要的操作。

但是谷歌搜索并没有找到这样的例子(有些东西很接近,但不完全......我认为)。所以基本上,我想要一个自定义命令,它取决于目标可执行文件,但不产生任何结果并运行不需要可移植来完成“安装”的脚本

谁有类似的例子吗?

cmake
2个回答
36
投票

CMake 的

install
命令允许自定义脚本。请参阅官方文档:
install
- 自定义安装逻辑
:

install([[SCRIPT <file>] [CODE <code>]]
        [COMPONENT <component>] [...])

SCRIPT 表单将在安装过程中调用给定的 CMake 脚本文件。如果脚本文件名是相对路径,它将相对于当前源目录进行解释。 CODE 表单将在安装过程中调用给定的 CMake 代码。代码被指定为双引号字符串内的单个参数。例如代码

install(CODE "MESSAGE(\"Sample install message.\")")

安装过程中会打印一条消息。

要运行自定义 shell 脚本(或任何程序),请将

install(CODE ...)
execute_process
:

install(CODE "execute_process(COMMAND my_script.sh)")

1
投票

这对我有用:使用

add_custom_target
,然后将主目标添加为自定义目标的依赖项。

# create custom target for setcap to be executed
add_custom_target(setcap ALL
    WORKING_DIRECTORY ${OUTPUT_DIR}/bin
    COMMAND ${CMAKE_COMMAND} -E 'sudo setcap cap_net_raw,cap_net_admin+eip ${}/bin/<executable name>)
# create a dependency on the custom target for main target, setcap depends on ${proj_name}
add_dependencies( ${proj_name} setcap)
© www.soinside.com 2019 - 2024. All rights reserved.