GCC を使用していて、リンカー オプションのリファレンスを読むと、外部ライブラリとリンクするためのオプションに気付くでしょう。
-L<directory>
このオプションは<directory>
、ライブラリ検索パスに追加するようリンカーに指示します。つまり、ライブラリ ファイルの場所をリンカに指示します。
-l<name-of-lib>
このオプションは、リンカーにライブラリとリンクするように指示します。POSIX 環境 (Linux、OSX、Cygwin または MinGW を使用する Windows) のライブラリは のようlibname-of-lib.a
に名前が付けられますが、オプションを使用すると、接頭辞や拡張子-l
を使用する必要はありません。また、オプションでは、それは小文字の L (大文字の i や数字の 1 ではない) であることに注意してください。lib
.a
-l
要約すると、別のディレクトリからライブラリにリンクするには、次のようにリンクします。
$ gcc <other flags> <object files> -o <executable> -L<directory> -l<library>
あなたの場合、-L
オプションにはライブラリがあるディレクトリを指定しproject1
、オプション-l
にはライブラリの基本名を渡す必要があります。
一方project1
、ライブラリに変換せず、そのオブジェクト ファイルと直接リンクしたい場合は、それも問題ありません。
$ gcc <flags> <object files of project1> <object files of project2> -o <executable>
もちろん、オブジェクト ファイルは絶対パスまたは相対パスにすることができます。たとえば、次のディレクトリ構造があるとします。
/
`-- ホーム
`-- ユーザー
`-- 私のプロジェクト
|-- project1
`-- project2
次に、ディレクトリにいる場合は、次のようにproject2
オブジェクトファイルにアクセスできますproject1
../project1/objectfile.o
もちろん、これらはすべて Makefile に入れることができます。