• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語:汎用のオブジェクトファイルのパス)

C言語:汎用のオブジェクトファイルのパス

このQ&Aのポイント
  • C言語で汎用のオブジェクトファイルのパスを指定する方法について
  • main.cで #include "fileio.h" して、関数の実体等をfileio.cに記述する場合のコンパイルについて
  • 汎用関数群を特定のディレクトリに配置する方法について

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

汎用関数をライブラリ化するのであれば、汎用ファイルをライブラリアンでライブラリファイルに登録するのが良いでしょう。 Makefile は以下のようになります。 最終ターゲット: main.o sub1.o sub2.o ... mylib.a ...   リンクコマンド オブジェクトリスト オプションスイッチ lib : mylib.a mylib.a : fileio.o mylib.o ...   ライブラリアンコマンド ライブラリオブジェクトリスト オプションスイッチ .c.o:   コンパイルコマンド コンパイルスイッチ ... .h.o:   コンパイルコマンド コンパイルスイッチ ... リンクコマンドのオブジェクトリストには、ライブラリ mylib.a に入れないオブジェクトのみ羅列します。 リンクコマンドのオプションスイッチには、ライブラリパスの指定スイッチで mylib.a ライブラリの置き場所も指定します。 ライブラリアンコマンドのライブラリオブジェクトリストには、ライブラリ mylib.a に入れるオブジェクトのみ羅列します。 ライブラリアンコマンドのオプションスイッチには、mylib.a の生成先も指定します。 この時、fileio.h を更新すると、 fileio.o は fileio.h に依存。fileio.o が更新される mylib.a は fileio.o に依存。mylib.a が更新される 最終ターゲットは mylib.a に依存。最終ターゲットが更新される と言う訳で、無事に最終ターゲットが更新されます。 なお、依存記述で lib : mylib.a とだけ書き、実行コマンド行が無い行がありますが、これは make lib とタイプした時にライブラリ mylib.a を更新する為の物です。 Makefile に love :   echo "Angry!" とか書いておくのも楽しいです(笑)

ssaass
質問者

補足

ご丁寧な説明ありがとうございます。 > .h.o: >   コンパイルコマンド コンパイルスイッチ .. この部分は個々の開発で用いるヘッダファイルとオブジェクトファイル(例えばsub1.cとsub1.h)のコンパイルですか? (他の開発にも使う汎用関数群である)fileio.hおよびfileio.cからfileio.oを作成するルールもここに記述することになりますか?

関連するQ&A

専門家に質問してみよう