- ベストアンサー
makefileの書き方
- UNIX環境でC言語のプログラムをコンパイルする方法について
- makefileを使用してインクルードディレクトリの指定を行った場合に無視される問題について
- makefileでロードモジュールを作成する際に発生する質問の問題について
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
「UNIX環境」と書いてありますが、HP-UXですか、他のOSですか? makefileの最後の行は、一度に二つのC言語ソースファイルから、一つのオブジェクトをコンパイルしようとしていますね。これは本当に可能でしょうか。HP-UXのCコンパイラは分からないのですが。 察するに、(3)だけのときオブジェクトができあがったというのは、TestMain.cだけコンパイルされたということではないでしょうか。 試しに OBJS = TestMain.o の行を OBJS = TestMain.o TestCommon.o に変更して、 最後の一行を $(OBJDIR)/TestMain.o: $(SRCDIR)/TestMain.c $(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) $(SRCDIR)/TestMain.c $(OBJDIR)/TestCommon.o: $(SRCDIR)/TestCommon.c $(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) $(SRCDIR)/TestCommon.c の4行に置き換えてみてはいかがでしょう。 (タブは全角スペースで表現しています)
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
HP-UX の make には -p ってオプションはないんでしょうか?
お礼
回答ありがとうございます。 -pのオプションはありました。 とりあえず一旦簡単なmakefileに立ち返り 確認することで動作させることができました。
- wormhole
- ベストアンサー率28% (1626/5665)
>よくわからないmakefileを載せたことで混乱を招いているような気がします・・・。 これは確実に載せた方がいいです。 症状だけ書かれても回答者側で元のMakefileがどのように書かれていたのか予想しないといけませんし、その想像が合ってるとは限りませんから。
- wormhole
- ベストアンサー率28% (1626/5665)
makeによるのかもしれないですが TestMain.o と ./TestMain.o は別扱いじゃないのかなぁ
お礼
回答ありがとうございます。 そのあたりも意識して書いてみます。
- Tacosan
- ベストアンサー率23% (3656/15482)
「インクルードディレクトリの指定が無視されてしまいます」 とか 「CFLAG2の-o $@も」 とか書いてあるけど, 具体的には「どのようにしたいところどのようになった」ことを「無視されてしまう」と言っているんでしょうか?
お礼
回答ありがとうございます。 自分でもよく分かっていないだけに質問も分かりにくくなってしまい申し訳ありません。 やりたいことは、以下のようなファイル構成でロードモジュールを作成できるmakefileを作ることです。 ・TestMain.c メイン関数を持つソース ・TestMain.h 上記ヘッダ ・TestCommon.c 共通関数を持つソース ・TestCommon.h 上記ヘッダ ・TestDefine.h 共通定義を持つヘッダ makeして展開された内容を確認すると、 (1)(2)があるとき、 (3)の「$(INCLUDE)/」に相当する部分と 「 $(CFLAGS2) 」内の「-o $@」に相当する部分がありません。 よろしくお願いします。
お礼
回答ありがとうございます。 OSはHP-UXです。 試行錯誤する中でご指摘のような構成でも試したのですが、 他の方の情報も合わせてもう一度やってみます。 ファイル構成や、やりたいことはNo.1の方のお礼に書いたとおりです。 よくわからないmakefileを載せたことで混乱を招いているような 気がします・・・。