staging.inyokaproject.org

Wie aus CMake Paket ein .deb bauen?

Status: Gelöst | Ubuntu-Version: Ubuntu 15.04 (Vivid Vervet)
Antworten |

queen-shit

Anmeldungsdatum:
17. Februar 2010

Beiträge: 146

Ich habe ein Git-Repo mit Sourcen ausgecheckt und erfolgreich kompiliert. An die Binaries komme ich nun ran. So weit, so gut - nur brauche ich diese auch für eine andere Anwendung in einem .deb-Paket. Ich habe schon stundenlang mit cpack rumgedoktert, aber es will einfach nicht laufen. Eine Fehlermeldung nach der anderen...

Zuletzt diese hier:

1
2
3
4
CPack: Create package using DEB
CPack: Install projects
CPack Error: CPACK_INSTALLED_DIRECTORIES should contain pairs of <directory> and <subdirectory>. The <subdirectory> can be '.' to be installed in the toplevel directory of installation.
CPack Error: Error when generating package: 

Daraufhin habe ich mal testweise das hier in meine CPackConfig.cmake eingefügt:

1
set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/build" "usr")

Das interessiert aber CPack auch nicht weiter und die Fehlermeldung bleibt. Kann mir jemand erklären, wie man auf möglichst simplem Wege einfache Binaries in ein .deb-Paket bekommt? Ich habe eins mit einer veralteten Version als Vorlage - dort müsste eigentlich nur ein aktuelleres Binary rein. Kann man ein bestehendes .deb vielleicht irgendwie bearbeiten?

tomtomtom Team-Icon

Supporter
Avatar von tomtomtom

Anmeldungsdatum:
22. August 2008

Beiträge: 55572

Also wenn sich das "per Hand" ohne weitere Konfiguration mit cmake kompilieren lässt sollte da ein Eintrag a la

 dh $@ --buildsystem=cmake

in der debian/rules helfen.

queen-shit

(Themenstarter)

Anmeldungsdatum:
17. Februar 2010

Beiträge: 146

Meinst du damit eine rules Datei für udev Regeln? Einen Pfad debian/rules gibt es nämlich dort nicht...

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4450

Ich habe ein Git-Repo mit Sourcen ausgecheckt

Welches? Ein eigenes oder ein öffentlich verfügbares, mit dem man das probieren kann?

tomtomtom Team-Icon

Supporter
Avatar von tomtomtom

Anmeldungsdatum:
22. August 2008

Beiträge: 55572

queen-shit schrieb:

Meinst du damit eine rules Datei für udev Regeln?

Nein. Wenn man ein Debian-Paket erstellt erstellt man in der Regel mindestens eine control und eine rules-Datei.

Siehe dazu auch https://wiki.debian.org/IntroDebianPackaging.

Du könntest auch mal beschreiben, wie du bisher konkret versucht hast, das Paket zu erstellen. Auch wäre interessant, ob du das nur zur eigenen Verwendung erstellen willst oder auch verteilen willst.

queen-shit

(Themenstarter)

Anmeldungsdatum:
17. Februar 2010

Beiträge: 146

Es geht hierum: https://github.com/Benjamin-Dobell/Heimdall

Die Version davon aus den Paketquellen ist buggy. Deswegen brauche ich diese aus den Sourcen, durch die ich Selbige in einer anderen Java-Anwendung ersetzen möchte, die die buggy Version selbst mitbringt. Ich habe genau das gemacht, was im Linux-Verzeichnis im ReadMe steht. Dann habe ich im Build-Ordner cpack .. aufgerufen. Aus dem Web habe ich mir dazu dieses makefile zusammen geklaut:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
SET(MAJOR_VERSION "1")
SET(MINOR_VERSION "0")
SET(PATCH_VERSION "0")
 
IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
INCLUDE(InstallRequiredSystemLibraries)
 
SET(CPACK_SET_DESTDIR "on")
SET(CPACK_PACKAGING_INSTALL_PREFIX "/tmp")
SET(CPACK_GENERATOR "DEB")
set(CPACK_SOURCE_GENERATOR "DEB")

#set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/build" "usr")

SET(CPACK_PACKAGE_DESCRIPTION "Heimdall")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Heimdall from sources")
SET(CPACK_PACKAGE_VENDOR "nowardev")
SET(CPACK_PACKAGE_CONTACT "xy@xy.com")
SET(CPACK_PACKAGE_VERSION_MAJOR "${MAJOR_VERSION}")
SET(CPACK_PACKAGE_VERSION_MINOR "${MINOR_VERSION}")
SET(CPACK_PACKAGE_VERSION_PATCH "${PATCH_VERSION}")
SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${MAJOR_VERSION}.${MINOR_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}")
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${MAJOR_VERSION}.${MINOR_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}")
#demo dependencies
#SET(CPACK_DEBIAN_PACKAGE_DEPENDS " kate , plasma-desktop, libc6 (>= 2.1.3) ")
 
#dependencies for this service menu
#SET(CPACK_DEBIAN_PACKAGE_DEPENDS " kate , dolphin ")
 
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
SET(CPACK_DEBIAN_PACKAGE_SECTION "kde")
SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
 
SET(CPACK_COMPONENTS_ALL Libraries ApplicationData)
INCLUDE(CPack)
 
ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")

djcj

Avatar von djcj

Anmeldungsdatum:
28. August 2013

Beiträge: 240

Wenn du das Paket nur zu eigenen Zwecken benutzen willst, könntest du es auch mit checkinstall versuchen: cmake && make && sudo checkinstall

Antworten |