实现通配符后没有输入文件错误

问题描述 投票:0回答:1

Problem

我有Makefile,我做了一些繁琐的工作来指定我所有的子程序:A.o通过K.o(都在source目录中)定义OBJ如下。这是我的Makefile,它按预期工作。

Method that works

ProjectName = SomeName
CXX = g++ -std=c++11
CXXFLAGS = -c -Wall

OBJ = build/main.o build/A.o \
build/B.o build/C.o \
build/D.o build/E.o \
build/F.o build/G.o \
build/H.o build/I.o \
build/J.o build/K.o \

all: $(ProjectName)

$(ProjectName): $(OBJS)
    $(CXX) -o $@ $(OBJS)

build/%.o: source/%.cpp
    $(CXX) -o $@ $(CXXFLAGS) $<

但是,为了逃避这些繁琐的工作,我已经实现了通配符$(wildcard source/*.cpp),我认为它应该可以工作,因为我称之为.o目录中所有source扩展名的文件

Methods that does not work

ProjectName = SomeName
CXX = g++ -std=c++11
CXXFLAGS = -c -Wall

SRC := $(wildcard source/*.cpp)
OBJ := $(patsubst source/%.cpp, build/%.o, $(SRC))

all: $(ProjectName)

$(ProjectName): $(OBJS)
    $(CXX) -o $@ $(OBJS)

build/%.o: source/%.cpp
    $(CXX) -o $@ $(CXXFLAGS) $<

但是,它显示了一个错误:

g++: fatal error: no input files compilation terminated.

任何帮助将不胜感激。

c++ makefile
1个回答
1
投票

我相信这是一个简单的错字:你称你的数组OBJ,但你引用它作为OBJS

© www.soinside.com 2019 - 2024. All rights reserved.