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
安装目标的cmake运行脚本?_Cmake - Fatal编程技术网

安装目标的cmake运行脚本?

安装目标的cmake运行脚本?,cmake,Cmake,我有一个项目,“安装”代码并不像复制一些文件那么简单。使用传统的Makefile,我只需要创建一个makeinstall目标,它运行一系列shell命令来完成我需要的任务 但谷歌搜索并没有出现这样的例子(我认为有些事情很接近,但不完全如此)。因此,基本上,我需要一个自定义命令,它依赖于目标可执行文件,但不生成任何内容,并且运行一个不需要可移植的脚本来完成“安装” 有这样的例子吗?CMake的install命令允许自定义脚本。见官方文件: 将在安装期间打印消息 要运行自定义shell脚本(或任何程

我有一个项目,“安装”代码并不像复制一些文件那么简单。使用传统的Makefile,我只需要创建一个
makeinstall
目标,它运行一系列shell命令来完成我需要的任务

但谷歌搜索并没有出现这样的例子(我认为有些事情很接近,但不完全如此)。因此,基本上,我需要一个自定义命令,它依赖于目标可执行文件,但不生成任何内容,并且运行一个不需要可移植的脚本来完成“安装”


有这样的例子吗?

CMake的
install
命令允许自定义脚本。见官方文件:

将在安装期间打印消息

要运行自定义shell脚本(或任何程序),请将
install(code…
与以下内容结合使用:


这对我很有用:使用
添加自定义目标
,然后将主目标作为依赖项添加到自定义目标

# 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(setcap ${proj_name})
#为要执行的setcap创建自定义目标
添加自定义目标(全部设置上限)
工作目录${OUTPUT\u DIR}/bin
COMMAND${CMAKE_COMMAND}-E'sudo setcap_net_raw,cap_net_admin+eip${}/bin/)
#在主目标的自定义目标上创建依赖项,setcap依赖于${proj_name}
添加依赖项(setcap${proj_name})

当然可以,这样我就可以运行cmake脚本了。但是我可以在这期间执行任意bash命令吗?它不应该是
add_dependencies(${PROJECT_NAME}setcat)
吗?请编辑您的答案并直接在答案中交换它们。
install(CODE "MESSAGE(\"Sample install message.\")")
install(CODE "execute_process(COMMAND my_script.sh)")
# 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(setcap ${proj_name})