0

「make」コマンドとそれから派生する他のものについて学び始めたところです。「make」の概念について教えてくれたこの良いリファレンス html ページを 入手 しましたhttp://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html

見積もり:

*# define any directories containing header files other than /usr/include
#
INCLUDES = -I/home/newhall/include  -I../include
# define library paths in addition to /usr/lib
#   if I wanted to include libraries not in /usr/lib I'd specify
#   their path using -Lpath, something like:
LFLAGS = -L/home/newhall/lib  -L../lib
# define any libraries to link into executable:
#   if I want to link in libraries (libx.so or libx.a) I use the -llibname 
#   option, something like (this will link in libmylib.so and libm.so:
LIBS = -lmylib -lm*

さて、ここで私が理解していないことがあります。入れなきゃいけない理由がわからない

INCLUDES と LFLAGS を使用してヘッダー ファイルを分離します。/usr/lib と /usr/include にあるファイルの違いは何ですか? 共有オブジェクト (+ アーカイブ) または環境パスではないヘッダー ファイルのパスが両方に含まれているため、私にはほとんど同じように思えます。

さらに、usr/include はコンパイル時のデフォルト パスであるため、サブディレクトリにあるすべてのファイルも含まれますか?? たとえば、私がやろうとしているのは、/usr/include/gtk+-3.0 を追加のパスとして含めたいのですが、これはサブディレクトリなので、含める必要がありますか?

4

3 に答える 3

2

実際には、これにはヘッダーやライブラリは含まれません。この-Iオプションは、ソース コードに含まれるヘッダー (標準ヘッダー以外) を見つける場所をコンパイラに伝え、オプションで#includeリンク-Lされたライブラリを見つける場所をリンカーに伝え-lます。

つまり、実際のヘッダーやライブラリではなく、ディレクトリを検索パスに追加します...

変数名は完全に任意ですが、LFLAGS (リンカー フラグ) CFLAGS (コンパイラ フラグ) のように、どのオプションがどのツールに属しているかを示します。

/usr/lib通常、システム ライブラリと/usr/includeヘッダーがそれぞれ含まれています。

C と GCC は、コンパイル プロセスをスクリプト化するためにのみ使用されるため、make に移行する前に C と GCC について詳しく読むことをお勧めします。

于 2013-08-06T06:37:03.643 に答える
0
  1. INCLUDES は、プログラムに含める .c および .h ファイルをコンパイラが検索するパスを指定します。つまり、プログラムに test.h を含めるように記述した場合、コンパイラは C ファイルの同じディレクトリと、make ファイルで INCLUDES を使用して指定したディレクトリを検索します。

  2. LFLAGS はライブラリ パスを指定します。プログラムに使用するライブラリが含まれています。INCLUDES と区別する理由は、INCLUDES にはソース ファイルが含まれるのに対し、LFLAGS にはバイナリ ファイルのみが含まれるためです。また、C ユーティリティを配布するために、ソースとライブラリ用に 2 つの異なるフォルダーを使用するという標準的な慣習もありました。

  3. /usr/include/gtk+-3.0 にあるファイルを使用するには、#include "gtk+-3.0/filename.h" として含めることができます。/usr/include が INCLUDES に含まれているため、そのディレクトリからの相対パスを指定できます。

于 2013-08-06T09:47:30.157 に答える
0

/usr/lib実行可能ファイルにリンクされるオブジェクト ファイルのライブラリが含まれています。/usr/includeライブラリで使用される関数、型、および構造の宣言を含むヘッダー ファイルが含まれています。それらは2つの別個のものです。

于 2013-08-06T06:29:09.510 に答える