[英]When I use “gcc” in makefile, after making it, I got a “cc” output
例如:
有3個源文件{ main.c
test1.c
test2.c
}目錄,並命名目錄文件test3
,並且有一個名為源文件test.c
在目錄test3
。
現在,我想創建一個makefile來編譯和鏈接這四個源文件。
這是我的Makefile:
# Cancel statement "CC=gcc"
src:=$(wildcard *.c) test3.c
obj:=$(patsubst %.c,%.o,$(src))
main:$(obj)
gcc -o main $(obj)
.PHONY:clean
clean:
rm *.o *~
當我調用make
進行編譯時,我得到如下輸出:
cc -c -o main.o main.c
cc -c -o test1.o test1.c
cc -c -o test2.o test2.c
cc -c -o test3.o test3/test3.c
gcc -o main main.o test1.o test2.o test3.o
我知道'cc'在Linux中鏈接到'gcc'。
我不明白的是,為什么Make調用cc
來編譯這四個源文件,卻調用gcc
來鏈接目標文件?
您更改了一條規則:從目標文件鏈接程序main
一條規則。 當make完成該鏈接時,您可以看到它使用了gcc
。
您無需做任何更改即可更改make用來編譯目標文件的內置規則,因此它們使用默認值(變量CC
的值) cc
。
您僅編寫了鏈接目標文件的規則,並允許Make使用其默認規則來決定如何從源文件構建目標文件。
如果使用--print-data-base
詢問,GNU Make將公開其規則。 在這種情況下,它告訴我們
%.o: %.c
# recipe to execute (built-in):
$(COMPILE.c) $(OUTPUT_OPTION) $<
和
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
最后
CC = cc
這解釋了為什么Make使用cc
來編譯您的C源代碼。 要更改它,只需設置CC = gcc
。 這是一個完整的Makefile,它可以執行此操作,還可以充分利用Make的內置規則,以在需要擴展時提供幫助:
src := $(wildcard *.c) test3.c
obj := $(patsubst %.c,%.o,$(src))
CC = gcc
main: $(obj)
$(LINK.c) -o $@ $^ $(LDLIBS)
.PHONY: clean
clean:
$(RM) *.o *~
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.