質問

I want to install a file in /etc/init.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 ?

役に立ちましたか?

解決

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.

他のヒント

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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top