首页 > 解决方案 > 在 CMake 中配置运行脚本

问题描述

我有一个项目,它由几个文件组成,如二进制文件、配置文件、启动停止脚本等。

这是一个简化的目录结构

/etc/configfile
/etc/xgd/autostart/runfile.Desktop
/usr/local/sbin/startscript
/usr/local/bin/binaryfile
/usr/local/share/project/main.glade
/usr/local/share/project/button.png

将使用配置运行脚本

configure_file(conf/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)

并使用安装

#copy sbin files
file(GLOB SBINFILES ${CMAKE_CURRENT_BINARY_DIR}/${SBINDIR}/*.sh)

# install scripts
install(FILES ${SBINFILES}
        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
        DESTINATION ${SBINDIR} 
        COMPONENT binary)

它包含以下文本

#!/bin/bash
# ###############################################
# runscript for my program
# date: 2018/05/21
# ###############################################

export G_MESSAGES_DEBUG=all
export LOGFILE=~/.logfile.log
pushd ${BINDIR}
${BINDIR}/${PROJECTNAME} 1>> $LOGFILE 2>> $LOGFILE
popd

好吧,只要我尝试安装到 /usr/local/share 就可以了,但是当我使用安装时

make DESTDIR=./dist install

仍然配置了 /usr/local/bin/binaryfile 这是合乎逻辑的但不是我想要的..

有没有办法将那个 destdir 添加到 cmake 配置中?

标签: shellcmakedirectory

解决方案


DESTDIR无法添加到 CMake配置中,因为在该阶段不知道该变量:该变量仅在安装步骤中才知道。

项目提供的脚本(和可执行文件)可能已准备好安装

make DESTDIR=<...> install

通过使用其他组件的相对路径

# From /usr/local/sbin/startscript execute /usr/local/bin/binaryfile.
../bin/binaryfile 1>> $LOGFILE 2>> $LOGFILE

需要时,可以使用以下方法将相对路径转换为绝对路径readlink

# From /usr/local/sbin/startscript execute /usr/local/bin/binaryfile
# using its absolute path
BINDIR=`readlink -f ../bin/`

pushd ${BINDIR}
${BINDIR}/${PROJECTNAME} 1>> $LOGFILE 2>> $LOGFILE
popd

推荐阅读