簡體   English   中英

Makefile沒有指定源文件

[英]Makefile without specifying the source file

我有一個makefile如下:

# Makefile for VocabLearn

MACHTYPE=$(shell uname -m)

GCC         = g++

CC=gcc
# OPTFLAGS=-g2
OPTFLAGS=-O3 -ffast-math -Wall -mfpmath=sse -msse2 -funroll-loops -march=core2
OTHERFLAGS=-Wall -fopenmp

INCLUDE_PATH=-I../lib/ann_1.1/include/ANN -I../lib/ann_1.1_char/include/ANN \
    -I../lib/imagelib -I../VocabLib -I../lib/zlib/include
LIB_PATH=-L../lib -L../VocabLib -L../lib/zlib/lib

OBJS=VocabLearn.o

LIBS=-lvocab -lANN -lANN_char -limage -lz

CPPFLAGS=$(INCLUDE_PATH) $(LIB_PATH) $(OTHERFLAGS) $(OPTFLAGS)

BIN=VocabLearn

all: $(BIN)

$(BIN): $(OBJS)
    g++ -o $(CPPFLAGS) -o $(BIN) $(OBJS) $(LIBS)

clean:
    rm -f *.o *~ $(LIB)

當我在提示中'make'時,它工作正常並輸出以下信息:(我使用Mac OS,c ++表示clang編譯器)

c ++ -I ../ lib / ann_1.1 / include / ANN -I ../ lib / ann_1.1_char / include / ANN -I ../ lib / imagelib -I ../ VocabLib -I ../ lib / zlib / include -L ../ lib -L ​​../ VocabLib -L ​​../ lib / zlib / lib -Wall -fopenmp -O3 -ffast-math -Wall -mfpmath = sse -msse2 -funroll-loops -march = core2 -c -o VocabLearn.o VocabLearn.cpp

g ++ -o -I ../ lib / ann_1.1 / include / ANN -I ../ lib / ann_1.1_char / include / ANN -I ../ lib / imagelib -I ../ VocabLib -I ../ lib / zlib / include -L ../ lib -L ​​../ VocabLib -L ​​../ lib / zlib / lib -Wall -fopenmp -O3 -ffast-math -Wall -mfpmath = sse -msse2 -funroll-loops - march = core2 -o VocabLearn VocabLearn.o -lvocab -lANN -lANN_char -limage -lz

我只是想知道這個makefile是如何工作的。 如您所見,由於此makefile未指定要編譯的源代碼,編譯器如何知道它應該處理的是“VocabLearn.cpp”? (我的猜測是它將根據目標文件的名稱搜索源文件,VocabLearn.o)這條線對我來說似乎有點奇怪:

g++ -o $(CPPFLAGS) -o $(BIN) $(OBJS) $(LIBS)

為什么'$(CPPFLAGS)'之前有'-o'?

此makefile使用隱式規則來編譯源文件。 規則:

$(BIN): $(OBJS)

要求在目標文件OBJS ,並已經知道如何建立VocabLearn.o如果有文件VocabLean.cpp

基本上有一個隱式規則將* .cpp文件轉換為* .o文件,但是你必須在一個目標中使用* .o作為依賴項。 在給定的Makefile中,您將VocabLearn.o作為$(BIN)的依賴項。 因此,VocabLearn.o從VocabLearn.cpp文件中自動生成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM