私は今Linuxで問題なく使用しているmakefileを使用している間に、最近問題を抱えています。 それは、すべてのオブジェクト、ソースファイル、およびコンパイルプロセスに使用されるヘッダーで文字列を生成することです。しかし、私は特別な治療のいくつかの種類を必要とするobjetcsに特定のルールを書いた、と私は以下のパターンルールを使用していた残りのため:LinuxのWindowsでのGNU Makeパターンルール
obj/%.o: src/%.c
$(CC) $(CFLAGS) $< -o [email protected]
それが働いているが、私は上の使用しようとすると、 Windowsは、当然のいくつかの変更と、それがないと、私は次のエラーを取得する:
make: *** No rule to make target 'obj\battle.o', needed by 'programa'. Stop
私は一人でそれを理解しようとしてきたが、それは困難でした。
Linuxのメイク:
SOURCES := $(shell ls src/*.c)
SUBST1 := $(subst src/,obj/,$(SOURCES))
OBJECTS := $(subst .c,.o,$(SUBST1))
HEADERS := $(shell ls headers/*.h)
CC = gcc
LFLAGS = -g -I headers/ -o programa -Wall -pedantic
CFLAGS = -g -I headers/ -c -Wall -pedantic
programa: $(OBJECTS) $(HEADERS)
$(CC) $(LFLAGS) $(OBJECTS) -lm
obj/arvore.o: src/arvore.c
$(CC) $(CFLAGS) -lm $< -o [email protected]
obj/main.o: $(HEADERS)
obj/%.o: src/%.c
$(CC) $(CFLAGS) $< -o [email protected]
clean:
ifneq ($(shell ls obj/*.o),)
rm obj/*.o
endif
ifneq ($(findstring ./programa, $(shell find . -maxdepth 1 -perm -111 -type f)),)
rm programa
endif
##############################################################
.PHONY = programa organize clean
Windowsのメイク:
AA = aa
SOURCES := $(shell dir /b /s src\*.c)
SUBST1 := $(subst $(shell cd)\, ,$(SOURCES))
SUBST2 := $(subst src\,obj\,$(SUBST1))
OBJECTS := $(subst .c,.o,$(SUBST2))
HEADERS := $(shell dir /b /s headers\*.h)
CC = gcc
LFLAGS = -g -o jogo -Wall -pedantic
CFLAGS = -g -c -Wall -pedantic
programa: $(OBJECTS) $(HEADERS)
$(CC) $(LFLAGS) $(OBJECTS) -lm
obj\main.o: src\main.c $(HEADERS)
$(CC) $(CFLAGS) $< -o [email protected]
obj\arvore.o: src\arvore.c
$(CC) $(CFLAGS) -lm $< -o [email protected]
obj\%.o: src\%.c;
$(CC) $(CFLAGS) $< -o [email protected]
clean:
ifneq ($(findstring .o, $(shell dir /b obj\*.o)),)
del obj\*.o
endif
ifneq ($(findstring jogo.exe, $(shell dir /b *.exe)),)
del jogo.exe
endif
PS:Windowsのメイクファイルの変数AAが、それは、一時的な修正ですので、通常はそれを "食べる" なし最初の変数からのchar、例えばCC = gccと言ってみましょう。最初のものですが、なぜそれが起こるのか知っていれば、cmdのコマンドは "cc -g [...]"になります。
ありがとうございます。
を、私はそれがここ原因だ疑うが、SUBST1のディレクトリ接頭辞を使用することができます削除されます 'subst' '、'ではなく、 '...'で置き換えて、悪いところに空白が残っている可能性があります。 – lockcmpxchg8b