Makefile没有指定源文件

 陈芝麻烂谷子我勒个去 发布于 2022-12-18 10:30

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

1 个回答
  • 此makefile使用隐式规则来编译源文件.规则:

    $(BIN): $(OBJS)
    

    要求输入目标文件OBJS,并且VocabLearn.o如果有文件,make已经知道如何构建VocabLean.cpp.

    2022-12-18 10:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有