gpt4 book ai didi

c++ - "no rule to make target"由另一个 makefile 创建的目标

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:39 25 4
gpt4 key购买 nike

主要的 makefile 是这样的,您可以看到它调用子目录中的另外两个 makefile:commbc

我知道我不会使用像一次处理所有 cpp 文件这样的 makefile 快捷方式,但现在请不要注意这一点。

comm/makefile 中有一条规则可以生成 comm/build/Communication.o 但不知何故我不知道如何将这个事实告诉主 makefile .

CPPFLAGS=-g -c --std=c++11 -Iinc -I/usr/include -I/usr/include/qt5 -I/usr/include/qt5/QtCore -I/usr/include/boost -Ibc/inc -Icomm/inc
LDFLAGS=-g -L/usr/lib/x86_64-linux-gnu/ -lQt5Core -lboost_system -lpthread -lboost_thread

all: comm/bin/party bc/bin/bctest bin/protocol

comm/bin/party:
cd comm && $(MAKE)

bc/bin/bctest:
cd bc && $(MAKE)

bin/protocol:build/main.o \
build/TrustedParty.o \
build/Player.o \
build/utils.o \
comm/build/Communication.o \
comm/build/FileParser.o \
comm/build/Party.o \
comm/build/PeerConnection.o \
comm/build/ServerModule.o \
comm/build/Utilities.o \
bc/build/BooleanCircuit.o \
bc/build/Gate.o \
bc/build/Wire.o
g++ -Wall $^ -o bin/protocol $(LDFLAGS)


build/main.o:src/main.cpp
g++ $(CPPFLAGS) -fPIC src/main.cpp -o build/main.o

build/TrustedParty.o:src/TrustedParty.cpp
g++ $(CPPFLAGS) src/TrustedParty.cpp -o build/TrustedParty.o

build/Player.o:src/Player.cpp
g++ $(CPPFLAGS) src/Player.cpp -o build/Player.o

build/utils.o:src/utils.cpp
g++ $(CPPFLAGS) src/utils.cpp -o build/utils.o

clean:
rm -fr build/* bin/*
rm -fr comm/build/* bin/*
rm -fr bc/build/* bin/*

当我运行 make 时,它返回

16:15:03 **** Build of configuration Default for project bmr ****
make all
g++ -g -c --std=c++11 -Iinc -I/usr/include -I/usr/include/qt5 -I/usr/include/qt5/QtCore -I/usr/include/boost -Ibc/inc -Icomm/inc -fPIC src/main.cpp -o build/main.o
g++ -g -c --std=c++11 -Iinc -I/usr/include -I/usr/include/qt5 -I/usr/include/qt5/QtCore -I/usr/include/boost -Ibc/inc -Icomm/inc src/TrustedParty.cpp -o build/TrustedParty.o
g++ -g -c --std=c++11 -Iinc -I/usr/include -I/usr/include/qt5 -I/usr/include/qt5/QtCore -I/usr/include/boost -Ibc/inc -Icomm/inc src/Player.cpp -o build/Player.o
g++ -g -c --std=c++11 -Iinc -I/usr/include -I/usr/include/qt5 -I/usr/include/qt5/QtCore -I/usr/include/boost -Ibc/inc -Icomm/inc src/utils.cpp -o build/utils.o
make: *** No rule to make target `comm/build/Communication.o', needed by `bin/protocol'. Stop.

16:15:11 Build Finished (took 7s.821ms)

最佳答案

假设 comm/Makefile 知道如何正确构建该目标(comm 目录中的 make build/Communication.o 有效);那么如果你真的想让它正常工作(你可能不想,请参阅 Recursive Make Considered Harmful 为什么)你需要告诉顶层 make 在这种情况下该怎么做。

像这样:

comm/build/%.o:
@$(MAKE) -C comm $(patsubst comm/%,%,$@)

关于c++ - "no rule to make target"由另一个 makefile 创建的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30031327/

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