我有一个项目,其中“安装”代码并不像复制一些文件那么简单。使用传统的 Makefile,我只需创建一个
make install
目标,该目标运行一系列 shell 命令来执行我需要的操作。
但是谷歌搜索并没有找到这样的例子(有些东西很接近,但不完全......我认为)。所以基本上,我想要一个自定义命令,它取决于目标可执行文件,但不产生任何结果并运行不需要可移植来完成“安装”的脚本
谁有类似的例子吗?
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)")
这对我有用:使用
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)