gpt4 book ai didi

c++ - Makefile 不指定源文件

转载 作者:太空狗 更新时间:2023-10-29 20:24:48 26 4
gpt4 key购买 nike

我有一个 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)

当我在提示中“制作”它时,它工作正常并输出以下信息:(我使用 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”?

最佳答案

此生成文件使用 implicit rules编译源文件。规则:

$(BIN): $(OBJS)

请求OBJS中的目标文件,如果有文件VocabLean.cpp,make已经知道如何构建VocabLearn.o .

关于c++ - Makefile 不指定源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com