[CMake] Packaging DEB at different directory with CPack

Eric Noulard eric.noulard at gmail.com
Tue Jan 24 02:21:23 EST 2012


2012/1/24 Damián Nohales <damiannohales at gmail.com>:
> Hello,
>
> I'm doing an application for Debian based systems and I need to package
> a .deb file, my application has several files to install in addition to
> the main executable.
>
> So, my CMakeLists.txt file looks like:
>
> --------
> project("myapp" C)
> cmake_minimum_required(VERSION 2.8)
>
> # The executable
> add_executable(myapp main.c)
> install(TARGETS myapp RUNTIME DESTINATION bin)

this is ok.

>
> # Another file to install
> install(FILES ${CMAKE_SOURCE_DIR}/data/myapp.desktop DESTINATION
> "${CMAKE_INSTALL_PREFIX}/share/applications")

This is usually wrong as it is an absolute PATH destination
why don't you simply specify
install(FILES ${CMAKE_SOURCE_DIR}/data/myapp.desktop DESTINATION
 share/applications)

> SET(CPACK_GENERATOR "DEB")
> SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Damián Nohales")
>
> INCLUDE(CPack)
> --------
>
> I execute CMake and build the package in this way:
>
> --------
> $ cd build
> $ cmake -DCMAKE_INSTALL_PREFIX=install ..

Specifying CMAKE_INSTALL_PREFIX has no effect on the following CPack call

> $ make package
> --------
>
> I need to specify a prefix for the installation because I want to test
> the application without installing on my whole system.

Then you should override CPACK_PACKAGING_INSTALL_PREFIX

$ cd build
$ cpack -D CPACK_PACKAGING_INSTALL_PREFIX=$HOME/testinstall -G DEB

another possibility is to install you deb content at an alternate location
using

dpkg --instdir=$HOME/testinstall -i your.deb


> But the .deb content resulting of executing "make package" is not what I
> expected:
>

[...]

>
> Well, I'm sure you are understanding the problem, I'm expecting that the
> generated .deb package to has the files under the /usr directory having
> too the myapp.desktop file under the following filename
> "/usr/share/applications/myapp.desktop".
>
> Any suggestion?

Always use relative DESTINATION install path unless you forcibly want
an ABSOLUTE destination.

-- 
Erk
Membre de l'April - « promouvoir et défendre le logiciel libre » -
http://www.april.org


More information about the CMake mailing list