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