は、通常、UNIXシステムでヘッダが$PREFIX/include
に行く...
install:
mv $(NAME).a $(LIB_PATH)
mv unixlib.h $(HEADER_PATH)
が、私が何であるか$(LIB_PATH)
と$(HEADER_PATH)
知りません$PREFIX/lib
に行きます。ここでPREFIX
は/usr
または/usr/local
などです。 linuxでは、あなたのライブラリをこれらのディレクトリにインストールすると、gcc
によって見つけられ、ちょうどgcc my_source.c -lunixlib
となります。
PREFIX
環境変数は、さまざまなビルドツールで共通して使用され、その接頭辞を指定します。
私はまたDESTDIR
変数を使用することをお勧めします。これはDebianパッケージツールで少なくとも使用されています。ディレクトリは、例えば供給DESTDIR
に存在しない場合
#PREFIX is environment variable, but if it is not set, then set default value
ifeq ($(PREFIX),)
PREFIX := /usr/local
endif
install: unixlib.a
install -d $(DESTDIR)$(PREFIX)/lib/
install -m 644 unixlib.a $(DESTDIR)$(PREFIX)/lib/
install -d $(DESTDIR)$(PREFIX)/include/
install -m 644 unixlib.h $(DESTDIR)$(PREFIX)/include/
注意、install -d ...
は、念のために使用されます。
ので、メイクファイルは次のようになります。
また、いくつかのヒントを見つけることmake
のための私の非再帰的テンプレートを見てすることができます:https://github.com/igagis/prorab/blob/master/src/prorab.mk
なぜ 'mv'?これにより、ソースディレクトリからヘッダーファイルが削除されます。 'cp'または' install'が通常ここで使用されます。ターゲットパスは通常、 '$(prefix)/ lib'や' $(prefix)/ include'のようなものです。どこにファイルをインストールしますか? –
私は 'foo.c'を作りました。' #include 'が' gcc -lunixlib foo.c' –
Garuda1
"でコンパイルできるようにしたいのですが、彼らが行く必要があるところ "はディストリ/フレーバーに依存し、gccのデフォルトのInclude/Lib pathesについてはあなたのケースに依存します。 Karsten Koopが 'prefix =/usr/local'で書いたように' LIB_PATH = $(prefix)/ lib'と 'HEADER_PATH = $(prefix)/ include'を意味する'/usr/local'を* prefix * 。 '/ usr /'は一般的に "ローカルインストール"によく使われるdistrosパッケージマネージャと '/ usr/local'によって管理されています - [あなたはFHSで読むことができます](https://en.wikipedia.org/ wiki/Filesystem_Hierarchy_Standard)。ビルダーは 'make install prefix =/home/example'を使ってそれを無効にできます – makadev