gpt4 book ai didi

C++ 生成文件错误 : No rule to make target

转载 作者:行者123 更新时间:2023-11-30 01:56:28 25 4
gpt4 key购买 nike

我们正在尝试在 Ubuntu 服务器上构建一个 Makefile。

文件结构是这样的:

/project
Makefile
/files
/src
[all .cpp files, including main.cpp]
/include
[all .h files]
/obj

终端输出:

制作:* 没有制作目标 files/obj/%.o' 的规则,sas' 需要。停止。

我的生成文件:

CC=g++
CFLAGS=-c -Wall
OBJECTS=main.o Parser.o People.o Person.o Queries.o Relation.o
SOURCES=main.cpp Parser.cpp People.cpp Person.cpp Queries.cpp Relation.cpp

all: sas

sas: files/obj/%.o
$(CC) $(OBJECTS) -o sas

files/obj/%.o: files/src/%.cpp
$(CC) $(CFLAGS) $(SOURCES)

最佳答案

这个 makefile 有很多问题。一个一个地修复它们会花费太长时间(我试过了,花了几百行),所以让我们从头开始吧。如果我们手动构建这个可执行文件,我们将如何构建它?像这样:

g++ -c -Wall files/src/main.cpp -o files/obj/main.o
g++ -c -Wall files/src/Parser.cpp -o files/obj/Parser.o
...
g++ -c -Wall files/src/Relation.cpp -o files/obj/Relation.o
g++ -Wall files/obj/main.o files/obj/Parser.o ... files/obj/Relation.o -o sas

为了构建目标文件,我们写了一个 pattern rule , 使用 automatic variables :

CXX=g++

files/obj/%.o: files/src/%.cpp
$(CXX) -c -Wall $< -o $@

为了构建可执行文件,我们使用构建的对象列表:

MODULES = main Parser People Person Queries Relation
OBJECTS = $(patsubst %, files/obj/%.o, $(MODULES))

sas: $(OBJECTS)
$(CXX) $^ -o $@

请注意,根本不需要 SOURCES我认为在 makefile 中维护一个源或对象列表是个好主意(因为这样多个项目可以共享源文件而不会使目录结构复杂到 hell ),但是没有理由维护两个这样的列表。

关于C++ 生成文件错误 : No rule to make target,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752756/

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