CMake rpm installing a file in /etc/init.d

萝らか妹 提交于 2019-12-08 00:58:43

问题


I want to install a file in /etc/ini.d directory

I have written code

INSTALL(FILES  ${CMAKE_SOURCE_DIR}/app/script/appd  DESTINATION /etc/init.d/appd)

but when I run packing code using cmake I get error

CMake Error at /home/vivek/workspace/app/build/standalone/cmake_install.cmake:54 (FILE):
  file cannot create directory: /etc/init.d/appd.  Maybe need
  administrative privileges.

How can I set cmake to install a file inside /etc/init.d directory ?


回答1:


You can do this, but you may need to explicitly set:

set(CPACK_SET_DESTDIR ON)

prior to:

include(CPack)

in your CMakeLists.txt file. (You will need to do this only for older versions on CMake/CPack, prior to 2.8.3)

The reason you need to do this is that you are specifying a full path name as the DESTINATION of one of your installed files. In order to do that properly in the packing phase, CPack needs to use a DESTDIR environment variable in its "make install" call.

We didn't do this automatically by default for backwards compatibility reasons.

But then, this bug was fixed in version 2.8.3 so that it could be done transparently and automatically with install rules that use full path names:

http://public.kitware.com/Bug/view.php?id=7000

Hopefully, you can use either CPACK_SET_DESTDIR to ON for your rpm packages, OR use a more recent version of CMake/CPack that includes the automatic fix.




回答2:


You can't. Only thing you can do is to ask user to run make install for your app with administrative priveleges.

Also, you can try detecting presense of sudo command and add_custom_command() which would install your files with sudo.



来源:https://stackoverflow.com/questions/8442824/cmake-rpm-installing-a-file-in-etc-init-d

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!