shell - 在 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 配置中?
解决方案
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
推荐阅读
- javascript - JavaScript:使用 multer 访问对象内部数组中的对象
- php - 如何在 PHP 中将参数传递给这个 SOAP 函数?
- python - 刻度的第二个刻度是 python/matplotlib 中相同位置的第一个刻度的函数
- javascript - 过滤嵌套的嵌套在猫鼬填充
- mysql - MySQL 限制每列值的行数
- flutter - Flutter - 当 Cohost 退出直播时,Agora 直播对所有人都结束
- amazon-web-services - aws redshift 表中的唯一键/主键
- javascript - 在发出时返回 PointerEvent 对象而不是子数据
- angularjs - 当我正在做的事情完全正确时,Angular JS 1.6 帮助即服务会导致 UNK 提供者
- html - VBA按钮单击具有相同的类(无ID,无类名)