gccのMakerFileでエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
完熟メロン

gccのMakerFileでエラー

#1

投稿記事 by 完熟メロン » 8年前

初めてLinuxで開発することになり四苦八苦しています。
gccのMakerFileが下記エラーになります。

「hogeに必要なターゲット `obj/main.o' を make するルールがありません」

試しに「$(OBJ_DIR)/%.o:」の「%」を「$(OBJ_DIR)/main.o:」とすると
上記エラーは解消されるので「%」が動作していないように思えます。
(次のオブジェクトファイルでエラーになりますが…)

アドバイスをいただけると助かります。
よろしくお願いいたします。

コード:

CC      = gcc
CFLAGS  = -MMD -MP -O3 -Wall -fPIC -std=c99 
LDFLAGS = 
LIBS    = ./core/libhoge.a
INCLUDE = ./src/
SRC_DIR = ./src
OBJ_DIR = ./obj
SOURCES = $(shell find $(SRC_DIR)/* -name *.c)
OBJS    = $(addprefix $(OBJ_DIR)/, $(notdir $(patsubst %.c, %.o, $(SOURCES))))
TARGET  = hoge
DEPENDS = $(OBJS:.o=.d)
#$(warning $(OBJS))

all: $(TARGET)

$(TARGET): $(OBJS) $(LIBS) 
	$(CC) $(LDFLAGS) -o $@ $^

$(OBJ_DIR)/%.o: %.c 
	@if [ ! -d $(OBJ_DIR) ]; \
		then echo "mkdir -p $(OBJ_DIR)"; mkdir -p $(OBJ_DIR); \
		fi
	$(CC) $(CFLAGS) -I $(INCLUDE) -o $@ -c $< 

clean:
	$(RM) $(OBJS) $(TARGET) $(DEPENDS)

-include $(DEPENDS)

.PHONY: all clean

アバター
いわん
記事: 32
登録日時: 9年前

Re: gccのMakerFileでエラー

#2

投稿記事 by いわん » 8年前

ソースファイル名の取得で shell 関数を使っていますので、実際にコマンドラインで実行してファイル名が取得できるかやってみてはどうでしょうか。
>find ./src/* -name *.c

shell でうまくいかない場合は wildcard を使う方法もあります。
SOURCES = $(notdir $(wildcard $(SRC_DIR)/*.c))
(wildcard でパスの一覧を取得して、notdir でファイル名のみ取り出します。)

マクロにディレクト名を含めるとファイル名のみほしいところにディレクトリ名がくっついてしまったりするので注意が必要です。

朱鷺
記事: 3
登録日時: 8年前
住所: 茨城

Re: gccのMakerFileでエラー

#3

投稿記事 by 朱鷺 » 8年前

完熟メロン さんが書きました: gccのMakerFileが下記エラーになります。

「hogeに必要なターゲット `obj/main.o' を make するルールがありません」
configureは実行しましたか?
makeコマンドはMakefile (×MakerFile)を読み込んで、指定された処理を実行するのですが、
このMakefileは初期状態では単なるテンプレートでしかなく、make実行前にconfigureをいう
スクリプトを実行して実行環境に合わせた設定を行う必要があります。
Makefileがあるディレクトリの中にconfigureというファイルはありませんか?
ある場合は、1度configureを実行(configureがあるディレクトリに移動して「./configure」を実行)
してからmakeコマンドを実行するとどうでしょうか。

返信

“C言語何でも質問掲示板” へ戻る