Debian 用パッケージのビルド

Debian 用パッケージのビルド

次のコマンドを使用してDebianパッケージをビルドしようとしています。

debian/rules clean
dpkg-source -b .
debian/rules build
debian/rules binary

私はこのファイルを持っています:

myprog_1.1.0.orig.tar.gz
myprog_1.1.0-1.dsc
myprog_1.1.0-1.debian.tar.xz
myprog_1.1.0-1_all.deb
myprog-doc_1.1.0-1_all.deb

すべてのステップが正常に完了しました。ディレクトリを開いたときにmyprog-1.1.0/debianDebianパッケージのように見えることがわかりました。しかし、私のライブラリはその中にありませんmyprog-1.1.0/debian/tmp/usr/lib/...

そしてコンパイルされたライブラリは私のものではありません.deb

  • これは普通ですか?
  • このパッケージを完了するために実行する必要がある他の作業はありますか?
  • tar.gz配布するにはfromを再作成する必要がありますかmyprog-1.1.0

ベストアンサー1

あなたのビルドに欠けている重要なことは、make installHonorMakefile変数DESTDIR(パッケージングターゲットでこれに似ている必要がある./debian/myprog)だと思います。

ビルド後にパッケージングする前にライブラリmyprog-1.1.0/debian/myprog/usr/libtmp

注:以下は、最小限の作業例とパッケージをインポートするために使用するコマンドです。すべてのファイルをこのディレクトリに入れますmyprog-1.0.1


Makefile:

CFLAGS += -O2 -Wall
LIBS += -L$(BUILDDIR)/usr/lib -lfunc

ifeq ($(BUILDDIR),)
BUILDDIR = build
endif

all: $(BUILDDIR)/usr/bin/myprog $(BUILDDIR)/usr/lib/libfunc.so

install: $(BUILDDIR)/usr/bin/myprog $(BUILDDIR)/usr/lib/libfunc.so
    mkdir -p $(DESTDIR)/usr/bin $(DESTDIR)/usr/lib
    cp $(BUILDDIR)/usr/bin/myprog $(DESTDIR)/usr/bin
    cp $(BUILDDIR)/usr/lib/libfunc.so $(DESTDIR)/usr/lib

dir-stamp:
    mkdir -p $(BUILDDIR)/usr/bin $(BUILDDIR)/usr/lib
    touch $@

$(BUILDDIR)/usr/bin/myprog: myprog.c $(BUILDDIR)/usr/lib/libfunc.so
    $(CC) $(CFLAGS) -o $@ $< $(LIBS)

$(BUILDDIR)/usr/lib/libfunc.so: func.c dir-stamp
    $(CC) $(CFLAGS) -shared -o $@ $<

clean:
    -rm -fr dir-stamp $(BUILDDIR)

myprog.c:

#include <stdio.h>
#include <stdlib.h>
#include "func.h"
int main(int argc, char **argv) {
    printf("%d\n", func(atoi(argv[1]), atoi(argv[2])));
    return 0;
}

func.h:

#ifndef FUNC_H
#define FUNC_H
int func(int a, int b);
#endif

func.c:

#include "func.h"
int func(int a, int b) {
    return a + b;
}

コマンドは次のとおりです。

dh_make --createorig
#choose type of package (single)
rm debian/*.ex debian/*.EX (if not needed)
# update: depcheck against the built command
dpkg-depcheck -d ./build/usr/bin/myprog 1 1
#edit debian/control (add Build-Depends)
dpkg-buildpackage -us -uc -rfakeroot
dpkg --contents ../myprog_1.0.1-1_i386.deb

./
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/myprog/
./usr/share/doc/myprog/changelog.Debian.gz
./usr/share/doc/myprog/copyright
./usr/share/doc/myprog/README.Debian
./usr/lib/
./usr/lib/libfunc.so
./usr/bin/
./usr/bin/myprog

使用cmake:

確信はありませcmakeんが、クイックテストは効果があります。

唯一の奇妙なことは、Makefileコマンドラインで生成されたプレフィックスがプロジェクトの複雑さによって問題を引き起こす可能性があることです。

デフォルトでは、プレフィックスを使用するとパッケージをビルドするとエラーがcmake発生しますが、使用するとエラーが発生します。/usr/localrmdir/usr

OWNER_WRITEまた、rpathを削除するときにエラーが発生したため、これを追加しましたmyprog。必要な権限を適切に設定するより良い方法があるかもしれません。

CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(myprog C)
ADD_DEFINITIONS(-O2 -Wall)
ADD_EXECUTABLE(myprog myprog.c)
ADD_LIBRARY(func SHARED func.c)
TARGET_LINK_LIBRARIES(myprog func)
INSTALL(TARGETS myprog DESTINATION "bin"
        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
INSTALL(TARGETS func DESTINATION "lib"
        PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)

以下を使用して作成しますMakefile

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .

おすすめ記事