2
這裏是我的生成文件,我在obj /目錄中有目標文件,我需要將它們編譯成bin /文件夾中的二進制文件,但不知何故,它不工作,因爲我想它工作,任何想法?如何從特定的目標文件製作特定的二進制文件?
SOURCES= $(wildcard *.c)
OBJECTS:= $(patsubst %.c, %.o, $(SOURCES))
OBJECTS:= $(addprefix obj/,$(OBJECTS))
NAMES:= $(patsubst %.c, %, $(SOURCES))
NAMES:= $(addprefix bin/,$(NAMES))
CC=gcc
CFLAGS= -Wall -c -o
DIRS = bin obj
all: $(DIRS) $(NAMES)
$(NAMES): $(OBJECTS)
$(CC) -o [email protected] $<
obj/%.o: %.c
$(CC) $(CFLAGS) [email protected] $<
$(DIRS):
mkdir -p [email protected]
clean:
rm -rf $(DIRS)
實際輸出:
mkdir -p bin
mkdir -p obj
gcc -Wall -c -o obj/task1.o task1.c
gcc -Wall -c -o obj/task2.o task2.c
gcc -Wall -c -o obj/task3.o task3.c
gcc -o bin/task1 obj/task1.o
gcc -o bin/task2 obj/task1.o
gcc -o bin/task3 obj/task1.o
預期輸出:
mkdir -p bin
mkdir -p obj
gcc -Wall -c -o obj/task1.o task1.c
gcc -Wall -c -o obj/task2.o task2.c
gcc -Wall -c -o obj/task3.o task3.c
gcc -o bin/task1 obj/task1.o
gcc -o bin/task2 obj/task2.o
gcc -o bin/task3 obj/task3.o
您好,感謝您的答覆,但任何的不正常工作,在第一種方式,我得到: 巨量諸如「(.init + 0x0)之類的行:_init'的多重定義 /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/../../../ crti.o :(.init + 0x0):首先在這裏定義「 和第二: 「gcc -o bin/task1 gcc:沒有輸入文件」 – Ikakok 2013-04-09 06:44:14
@Ikakok:對不起,我犯了一個錯誤。我會編輯我的答案。 – Beta 2013-04-09 14:49:08
你好再次=)現在一切正常,非常感謝,如果你發現你幫助第二次=),但如果你不介意,你可以解釋我怎麼不寫「$(NAMES):obj /% .o「(實際上我可以,但它給了我」沒有規則blahblahblah「)$(NAMES)由bin/組成,爲什麼我應該直接寫它? bin /%,是否有任何方法將符號「%」寫入$(NAMES)?也許像$(%NAMES)這樣的東西,或者給我一個鏈接(請指出,除了GNU makefile手冊之外的任何鏈接(我的英語還不夠好,無法在沒有詞彙的情況下自由閱讀) –
Ikakok
2013-04-10 06:47:26