現有如下檔案目錄,需要構建makefile檔案。
檔案之間的依賴關係為:
需要生成目標檔案為indexer queryone printindex query
所有.o檔案都依賴於freq_list.h
queryone、worker、query還依賴於worker.h
按照常規寫法,先編譯生成.o檔案,再鏈結生成目標執行檔案
寫出的makefile為:
# makefile for programs to index and search an index.
flags= -wall -g
src = freq_list.c punc.c
obj = freq_list.o punc.o
all : indexer queryone printindex query
indexer : indexer.o $
gcc $ -o $@ indexer.o $
printindex : printindex.o $
gcc $ -o $@ printindex.o $
queryone : queryone.o worker.o $
gcc $ -o $@ queryone.o worker.o $
query : query.o worker.o $
gcc $ -o $@ query.o worker.o $
# separately compile each c file
%.o : %.c freq_list.h
gcc $ -c $<
queryone.o : worker.h
worker.o : worker.h
query.o : worker.h
clean :
-rm *.o indexer queryone printindex query
若還需要巨集定義等選項,可以在flags中新增,如-dmacro --werror -std=c99等 makefile語法示例
edit main.o kbd.o cc o edit main.o kdb.o main.o main.c defs.h cc c main.c kbd.o kbd.c defs.h command.h cc c kbd.c clean rm o edit makefile中使用變數 object...
Makefile示例學習
裸機程式中的makefile是把程式的編譯和鏈結過程分開的,編譯要使用編譯器gcc,鏈結使用鏈結器ld 示例 led.bin start.o arm linux ld ttext 0x0 o led.elf arm linux objcopy o binary led.elf led.bin arm...
書寫makefile的注意點
1 空格 定義乙個變數時用 foo 1 這種形式,1後面千萬不可以有空格,否則,foo的值為 1 等於號和1之間的空格有無,並沒有關係。2 ifeq ifeq的形式是 ifeq foo ar 此時會進行巨集擴充套件。ar 前的空格有無,並沒有關係。3 ifdef ifdef的形式是 ifdef fo...