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
(タブは消えてしまいました)
No.3ベストアンサー
- 回答日時:
「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行に置き換えてみてはいかがでしょう。
(タブは全角スペースで表現しています)
回答ありがとうございます。
OSはHP-UXです。
試行錯誤する中でご指摘のような構成でも試したのですが、
他の方の情報も合わせてもう一度やってみます。
ファイル構成や、やりたいことはNo.1の方のお礼に書いたとおりです。
よくわからないmakefileを載せたことで混乱を招いているような
気がします・・・。
No.4
- 回答日時:
>よくわからないmakefileを載せたことで混乱を招いているような気がします・・・。
これは確実に載せた方がいいです。
症状だけ書かれても回答者側で元のMakefileがどのように書かれていたのか予想しないといけませんし、その想像が合ってるとは限りませんから。
No.1
- 回答日時:
「インクルードディレクトリの指定が無視されてしまいます」
とか
「CFLAG2の-o $@も」
とか書いてあるけど, 具体的には「どのようにしたいところどのようになった」ことを「無視されてしまう」と言っているんでしょうか?
回答ありがとうございます。
自分でもよく分かっていないだけに質問も分かりにくくなってしまい申し訳ありません。
やりたいことは、以下のようなファイル構成でロードモジュールを作成できるmakefileを作ることです。
・TestMain.c メイン関数を持つソース
・TestMain.h 上記ヘッダ
・TestCommon.c 共通関数を持つソース
・TestCommon.h 上記ヘッダ
・TestDefine.h 共通定義を持つヘッダ
makeして展開された内容を確認すると、
(1)(2)があるとき、 (3)の「$(INCLUDE)/」に相当する部分と
「 $(CFLAGS2) 」内の「-o $@」に相当する部分がありません。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- UNIX・Linux JSLinuxについて。 Linuxのこの手順のプログラミングは合っているでしょうか。 ①ホームディ 2 2022/06/20 15:33
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をfind.shとして、以下の条件をすべて満たすファ 1 2023/02/03 03:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でヘッダファイルにグロー...
-
1 つ以上の複数回定義されてい...
-
マクロ コンパイルがグレーバック
-
ビルドとリビルドの違いを教え...
-
<math.h>があるのにsqrtが・...
-
Makefile作成時の拡張子.oとは?
-
「utime.h が見つからない」エ...
-
exe内に記述したパスワードにつ...
-
VBAを何回も作り直して、容量が...
-
C++/CLIで、アンマネージC++のD...
-
CImageクラスの使用について
-
漢字のコメントをはずすとコン...
-
h8/3052でsin,cos関数を使うた...
-
他のLinuxでも動くa.outの作り方
-
ILSpyで、デコンパイルできない。
-
コンパイルエラー:ユーザ定義...
-
写真の抜き出し
-
VB6で開発中…標準モジュール間...
-
cygwinのgccが、エラーになって...
-
Microsoft Visual C++ 2005 Exp...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
エクセルVBAではRound...
-
C言語でヘッダファイルにグロー...
-
外部シンボル "_main"は未解決です
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
戻り値について
-
C言語でmからnまでの合計を求め...
-
C++コンパイル時に『 C1083: in...
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
PRO*C コンパイルエラー
-
[c++] <pthread.h>がinclude で...
-
【VC++6.0(MFC)】警告「LINK : ...
おすすめ情報