2016-10-06 3 views
0

だからここに私が働いているレポです:私はlibが使用できるようにすると、私のコンパイルのlib(unixlib.a)、どこで私のヘッダ(unixlib.h)はそうあるべき場所知りたいhttps://github.com/Garuda1/unixlibMakefileに "make install"を実装するには?

(下が単純でコンパイルして、Linux-x86またはLinuxの-x86_64で):

$ gcc my_source.c -lunixlib 

my_source.cヘッダを含みます。

私はMakefileにこれを行うに追加するとします。ライブラリファイル、

+0

なぜ 'mv'?これにより、ソースディレクトリからヘッダーファイルが削除されます。 'cp'または' install'が通常ここで使用されます。ターゲットパスは通常、 '$(prefix)/ lib'や' $(prefix)/ include'のようなものです。どこにファイルをインストールしますか? –

+0

私は 'foo.c'を作りました。' #include 'が' gcc -lunixlib foo.c' – Garuda1

+0

"でコンパイルできるようにしたいのですが、彼らが行く必要があるところ "はディストリ/フレーバーに依存し、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

答えて

2

は、通常、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

関連する問題