32349


debパッケージでインストールした実行ファイルにて、同じパッケージから共にインストールしたその他の画像などのファイルにアクセスしたいのですが、どのようにしてパスを取得すればよいでしょうか？

詳細：  
アプリケーションの配布に、debian package(.deb)パッケージの作成を検討しています。  
Gtk3/C言語にて作成したGUIアプリケーションです。  
アプリケーションの画面上に、SVG形式の画像ファイル(以下画像ファイル)をアイコンなどとして表示して使っています。  
現在、installターゲットを持ったMakefileを含むプロジェクトソースから、debパッケージを作成し、インストールした実行ファイルをターミナルから実行するところまでは成功しています。  
しかし、画像ファイルへのパスを、カレントディレクトリからの相対パスで指定していたため、アプリケーションに必要な画像ファイルへアクセスできず、使用できない状態になっています。


CC BY-SA 3.0
2017-02-02T12:35:19.550
32338
2017-03-23T14:10:04.873
2017-02-02T18:01:56.450
754
20495
question
linux ubuntu デプロイ debian
debパッケージでインストールした実行ファイルから、その他のファイルへアクセスする方法がわからない


昨今のアプリケーションであれば、大抵は自分でMakefileを書かずに、autotoolsやcmakeなどのビルドツールを使っていると思います。  
それらの場合、ビルド時にインストール先を決定し(例えば「./configure --prefix=/usr」や、「cmake
-DCMAKE_INSTAL_PREFIX=/usr」などのように)、その指定に従ってインストール先をコンパイルオプションや設定ヘッダファイルで定義してビルドします。

例えば、以下はcmakeを使ったプロジェクト例です。

main.c

[code]

    // main.c
    #include <stdio.h>
    #include "config.h"
    
    int main()
    {
        printf("Hello, world!\n");
        printf("image = \"%s\".\n", DATADIR "/tux.png");
        return 0;
    }
    
[/code]

config.h.in

[code]

    #cmakedefine    DATADIR "@DATADIR@"
    
[/code]

CMakeLists.txt

[code]

    CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
    
    PROJECT(sample)
    SET(sample_VERSION_MAJOR 0)
    SET(sample_VERSION_MINOR 1)
    
    SET(DATADIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}")
    CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/config.h.in" "${CMAKE_BINARY_DIR}/config.h")
    INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}")
    
    ADD_EXECUTABLE(sample main.c)
    INSTALL(TARGETS sample DESTINATION bin)
    INSTALL(FILES tux.png DESTINATION "share/${PROJECT_NAME}")
    
[/code]

(後は、適当な画像ファイル「tux.png」を用意します)

このようなプロジェクトで「cmake」を実行すると、以下のような「config.h」が作成されます。

[code]

    #define DATADIR "/usr/share/sample"
    
[/code]

このヘッダファイルをソースファイルでincludeする事により、インストール先を知る事ができます。

もしautotoolsやcmakeを使わずにやるのであれば、自分で何とかするしかありませんが、まぁちょっと覚えるのが大変でもこれらのビルドツールを使用することをお薦めします。  
debパッケージを作るのも、上記のファイルを用意した状態から、

[code]

    dh_make --createorig -s
    dpkg-buildpackage -b
    
[/code]

で、(「debian/rules」などのファイルも自分で作らずに自動的に作成して)パッケージが作成できて楽ですし。


CC BY-SA 3.0
2017-02-02T17:37:58.413
32349
2017-02-02T17:37:58.413
15473
32338
answer


debパッケージ作成をしたことがあります。  
debian/rules はmakeを利用していますので、makeの環境変数が使えると思います。  
詳しいことはmanページに載っていると思います。


CC BY-SA 3.0
2017-03-23T10:54:47.447
33489
2017-03-23T10:54:47.447
13432
32338
answer


dep パッケージをインストールすると `/var/lib/dpkg/info/` の下に `パッケージ名.list` というファイルが有れば、その中に
作成されたファイル/ディレクトリが書かれてますので そこから読み取れるかもしれません。

例: file コマンドの場合

[code]

    $ cat /var/lib/dpkg/info/file.list
    /.
    /usr
    /usr/share
    /usr/share/bug
    /usr/share/bug/file
    /usr/share/bug/file/presubj
    /usr/share/bug/file/control
    /usr/share/doc
    /usr/share/doc/file
    /usr/share/doc/file/README.Debian
    /usr/share/doc/file/copyright
    /usr/share/doc/file/README.gz
    /usr/share/man
    /usr/share/man/man1
    /usr/share/man/man1/file.1.gz
    /usr/bin
    /usr/bin/file
    /usr/share/doc/file/changelog.Debian.gz
    
[/code]


CC BY-SA 3.0
2017-03-23T14:10:04.873
33494
2017-03-23T14:10:04.873
5008
32338
answer