6

私はアプリケーションバンドルをいくつかのスクリプト、多分デーモン、あるいはヘルパーバイナリを使って作成しています...このようなバイナリをコンパイルすると、という相対的なで実現できます。パス?例えば、より多くの良心的なMakefileはこれは素晴らしいです相対パス名でのクロスコンパイル - バイナリの移植性/組み込み性のために? (GCC)

--bindir=DIR   user executables [EPREFIX/bin] 
--sbindir=DIR   system admin executables [EPREFIX/sbin] 
--libexecdir=DIR  program executables [EPREFIX/libexec] 
--sysconfdir=DIR  read-only single-machine data [PREFIX/etc] 
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 
--localstatedir=DIR modifiable single-machine data [PREFIX/var] 
--libdir=DIR   object code libraries [EPREFIX/lib] 
--includedir=DIR  C header files [PREFIX/include] 
--oldincludedir=DIR C header files for non-gcc [/usr/include] 
--datarootdir=DIR  read-only arch.-independent data root [PREFIX/share] 
--datadir=DIR   read-only architecture-independent data [DATAROOTDIR] 
--infodir=DIR   info documentation [DATAROOTDIR/info] 
--localedir=DIR  locale-dependent data [DATAROOTDIR/locale] 
--mandir=DIR   man documentation [DATAROOTDIR/man] 
--docdir=DIR   documentation root [DATAROOTDIR/doc/hiawatha] 
--htmldir=DIR   html documentation [DOCDIR] 
--dvidir=DIR   dvi documentation [DOCDIR] 
--pdfdir=DIR   pdf documentation [DOCDIR] 
--psdir=DIR   ps documentation [DOCDIR] 

は、あなたが/opt/local代わりの/usr/localにすべてをインストールすることができます...のような条項のために含まれています。多分夢中になる、とsed経由でバイナリの名前を変更..私はそれを得る...

しかし、任意のようにパスを設定する機能をマッピングする機能を拡張する場合どのような、私の小さな脳に不明確なままでは、です同様の方法で実行可能に対する相対ディレクトリ、...

--prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] 
--prefix=./  aka [../relative/to/binary]  

そうで、たとえば、あなたがからbinを立ち上げ関係なく、それは常に、それは.confファイルだがアップになる予定だったことを知っているであろう1つのフォルダ、その相対../etcフォルダ内、または場合によってはその隣に同じディレクトリ内にある./。同様に、ターゲットのアクセス許可/ディレクトリ構造について疑問を抱かせることなく、ログファイルやpidファイルなどへの書き込みアクセスを保証することができます。

これにより、完全にポータブルな/bin /etc /lib /varディレクトリ構造が有効になります予測可能性のようなものです...しかし、私は単にそれが "うまくいく"とは思っていません。単に "静的にリンクする"かどうかは不明です。本当に、別のシステムに移動できるバイナリを作成します(、このシナリオでは、同じ場所に同じサポートライブラリを持つものに変更してください。)これでクロスコンパイルすることは可能でしょうか?方法?同じビルドサイクルで複数のアーキテクチャを構築できますか? (CC、CFLAGS、LDFLAGS、-l、-I、およびCPP 101など)の推奨を使用することもできます。これは、おそらくi386とx86_64のようなものです。それは70年代の数学教師のために書かれたものではありませんでしたか?

答えて

0

完全な一般性では、それは動作しません。/etcにはシステム全体で共有されることが予想されるものがあり、1つのアプリケーションのプライベートコピーを保持しようとすると正しく動作しません。

あなたのアプリはおそらく、システム上のすべての共有リソースを使用しているとは限りません。ローカル/ binと/ sbinを使用するか、アプリケーションのディレクトリ内の相対パスから実際のものにシンボリックリンクすると問題ありません。/varはあなたのアプリが直接知っておく必要のあるものではないようです - 独自の方法でログを保存することを止めるもの、またはsyslogdを使うもの?

関連する問題