dポイントプレゼントキャンペーン実施中!

UNIX環境でC言語で作成したプログラムのコンパイルをmakefileを使用して行いたいのですが、
インクルードディレクトリの指定が無視されてしまいます。(CFLAG2の-o $@も)
何が問題なのでしょうか?

ファイルの構成としてはとりあえず全て同じディレクトリに格納しています。
(3)だけであればインクルードディレクトリの指定等は問題なく展開され、
オブジェクトができあがります。

(1)(2)でロードモジュールを作成しようとすると質問の問題が発生します。

#
CC = cc
CFLAGS = -Aa -O -g -Y -D_HPUX_SOURCE
CFLAGS2 = -o $@ -c
#

INCDIR = .
SRCDIR = .
OBJDIR = .
INCLUDE = -I$(INCDIR)

OBJS = TestMain.o
MODULE = $(OBJDIR)/TestMain

all: $(MODULE)  ・・・・・(1)

$(MODULE): $(OBJS)  ・・・・・(2)
$(CC) -o $@ $^

$(OBJDIR)/TestMain.o: $(SRCDIR)/TestMain.c $(SRCDIR)/TestCommon.c  ・・・・・(3)
$(CC) $(INCLUDE)/ $(CFLAGS) $(CFLAGS2) $(SRCDIR)/TestMain.c $(SRCDIR)/TestCommon.c

(タブは消えてしまいました)

A 回答 (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行に置き換えてみてはいかがでしょう。
(タブは全角スペースで表現しています)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

OSはHP-UXです。
試行錯誤する中でご指摘のような構成でも試したのですが、
他の方の情報も合わせてもう一度やってみます。

ファイル構成や、やりたいことはNo.1の方のお礼に書いたとおりです。
よくわからないmakefileを載せたことで混乱を招いているような
気がします・・・。

お礼日時:2014/01/18 09:30

HP-UX の make には


-p
ってオプションはないんでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

-pのオプションはありました。

とりあえず一旦簡単なmakefileに立ち返り
確認することで動作させることができました。

お礼日時:2014/01/25 11:06

>よくわからないmakefileを載せたことで混乱を招いているような気がします・・・。



これは確実に載せた方がいいです。
症状だけ書かれても回答者側で元のMakefileがどのように書かれていたのか予想しないといけませんし、その想像が合ってるとは限りませんから。
    • good
    • 0

makeによるのかもしれないですが


TestMain.o

./TestMain.o
は別扱いじゃないのかなぁ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

そのあたりも意識して書いてみます。

お礼日時:2014/01/18 09:24

「インクルードディレクトリの指定が無視されてしまいます」


とか
「CFLAG2の-o $@も」
とか書いてあるけど, 具体的には「どのようにしたいところどのようになった」ことを「無視されてしまう」と言っているんでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

自分でもよく分かっていないだけに質問も分かりにくくなってしまい申し訳ありません。
やりたいことは、以下のようなファイル構成でロードモジュールを作成できるmakefileを作ることです。

・TestMain.c   メイン関数を持つソース
・TestMain.h   上記ヘッダ
・TestCommon.c  共通関数を持つソース
・TestCommon.h  上記ヘッダ
・TestDefine.h  共通定義を持つヘッダ

makeして展開された内容を確認すると、
(1)(2)があるとき、 (3)の「$(INCLUDE)/」に相当する部分と
「 $(CFLAGS2) 」内の「-o $@」に相当する部分がありません。

よろしくお願いします。

お礼日時:2014/01/18 09:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!