当前位置: 首页 > 知识库问答 >
问题:

Makefile忽略特定行

濮丁雷
2023-03-14

我在做一个简单的C++项目,它使用两个不同的程序(一个发送信息,另一个接收信息,如果你好奇的话)。我创建了一个makefile来编译这两个程序并一次性生成两个可执行文件,但当我执行make指令时,我得到以下错误:

makefile:51: atención: se anulan las instrucciones para el objetivo 'build/NetcpSend.o'
makefile:32: atención: se ignoran las instrucciones viejas para el objetivo 'build/NetcpSend.o'
g++ -c -o build/NetcpSend.o src/NetcpSend.cc -g -std=c++11
g++ -c -o build/generic_l.o src/generic_l.cc -g -std=c++11
g++ -c -o build/socket_c.o src/socket_c.cc -g -std=c++11
g++ -c -o build/file_c.o src/file_c.cc -g -std=c++11
g++ -o bin/NetcpSend build/NetcpSend.o build/generic_l.o build/socket_c.o build/file_c.o -g -std=c++11
make: *** No hay ninguna regla para construir el objetivo 'build/NetcpReceive.o', necesario para 'NetcpReceive'.  Alto.

翻译:

makefile:51: atention: instructions cancelled for 'build/NetcpSend.o' objective.
makefile:51: atention: instructions cancelled for 'build/NetcpReceive.o' objective.
g++ -c -o build/NetcpSend.o src/NetcpSend.cc -g -std=c++11
g++ -c -o build/generic_l.o src/generic_l.cc -g -std=c++11
g++ -c -o build/socket_c.o src/socket_c.cc -g -std=c++11
g++ -c -o build/file_c.o src/file_c.cc -g -std=c++11
g++ -o bin/NetcpSend build/NetcpSend.o build/generic_l.o build/socket_c.o build/file_c.o -g -std=c++11
make: *** No rule to build 'build/NetcpReceive.o', needed for NetcpReceive. Stop.

当我尝试执行NetcpReceive时,它显然找不到可执行文件,因为它还没有编译。

这是我的makefile:

CC=g++
CFLAGS=-g -std=c++11

INCLUDE_DIR=include
OBJECTS_DIR=build
SRC_DIR=src
BIN_DIR=bin

_OBJ1 = NetcpSend.o generic_l.o socket_c.o file_c.o
OBJ1 = $(patsubst %,$(OBJECTS_DIR)/%,$(_OBJ1))

_OBJ2 = NetcpReceive.o generic_l.o socket_c.o file_c.o
OBJ2 = $(patsubst %,$(OBJECTS_DIR)/%,$(_OBJ2))

BIN_NAME1 = NetcpSend
BIN_NAME2 = NetcpReceive

all: All NetcpSend NetcpReceive

All: 
$(OBJECTS_DIR)/NetcpSend.o: $(SRC_DIR)/NetcpSend.cc
    $(CC) -c -o $@ $< $(CFLAGS)

$(OBJECTS_DIR)/generic_l.o: $(SRC_DIR)/generic_l.cc
    $(CC) -c -o $@ $< $(CFLAGS)

$(OBJECTS_DIR)/socket_c.o: $(SRC_DIR)/socket_c.cc
    $(CC) -c -o $@ $< $(CFLAGS)

$(OBJECTS_DIR)/file_c.o: $(SRC_DIR)/file_c.cc
    $(CC) -c -o $@ $< $(CFLAGS)

NetcpSend: $(OBJ1)
    $(CC) -o $(BIN_DIR)/$(BIN_NAME1) $^ $(CFLAGS)


NetcpReceive: $(OBJ2)
    $(CC) -o $(BIN_DIR)/$(BIN_NAME2) $^ $(CFLAGS)

$(OBJECTS_DIR)/NetcpSend.o: $(SRC_DIR)/NetcpSend.cc
    $(CC) -c -o $@ $< $(CFLAGS)


run:    #Runs the code
    ./$(BIN_DIR)/$(BIN_NAME1)
    ./$(BIN_DIR)/$(BIN_NAME2) 

dbg:    #Debugs the code
    gdb ./$(BIN_DIR)/$(BIN_NAME)

.PHONY: clean

clean:
    @rm -f $(OBJECTS_DIR)/*.o $(BIN_DIR)/* $(BIN_DIR)/*

我不知道是什么导致了这个问题,也不知道我的makefile是否按照标准是正确的。有人能帮我一把吗?

共有1个答案

李意致
2023-03-14

没有netcpreceive.o的规则,只有netcpsend.o和其他规则。

由于所有的对象构建方法看起来都很相似,所以您可以/应该声明一个模式规则:

$(OBJECTS_DIR)/%.o: $(SRC_DIR)/%.cc
    $(CC) -c -o $@ $< $(CFLAGS)

您的可执行程序配方也可以改进。分别声明制作方法和设置先决条件:

# Prerequisites
$(BIN_DIR)/NetcpSend: $(OBJ1)
$(BIN_DIR)/NetcpReceive: $(OBJ2)

# Recipes
$(BIN_DIR)/NetcpReceive $(BIN_DIR)/NetcpSend:
    $(CC) -o $@ $^ $(CFLAGS)

我个人在使用make时尽量不要弄乱对象和bin文件夹。

 类似资料:
  • 使用ESLint是否可以忽略整个目录的一个特定规则? 在我的例子中,我想忽略为一个名为的目录

  • 我试图爬过craiglist的论坛类别。组织机构(https://forums.craigslist.org/).我的蜘蛛: 我通过错误回调收到以下消息: [失败实例:Traceback:: /usr/local/lib/python2.7/site-packages/twisted/internet/defer.py: 455:回调 /usr/local/lib/python2.7/site-p

  • 问题内容: 我已经在Angular中设置了路由,并且一切正常: 但是,我现在有一个锚标记用作注销按钮,它将仅将用户重定向到/ User / Logout,然后注销将注销用户并将其重定向到登录页面。所以我想要的是让angular js忽略此特定路由,并允许它执行常规的HTTP重定向。这似乎很简单,但是我找不到解决问题的办法。 我知道我可以执行click事件并在click事件中进行window.loc

  • 我想创建一个SpringWebClient,它忽略一个特定的HTTP错误。来自WebClient的文档。检索(): 默认情况下,4xx和5xx响应会导致WebClientResponseException。要自定义错误处理,请使用ResponseSpec。onStatus(谓词、函数)处理程序。 我希望通过WebClient实例的所有调用都忽略特定的HTTP错误。这就是为什么onState()对我

  • 问题内容: 我正在使用以下选项 在bash脚本中停止执行错误。我有大约100行脚本正在执行,并且我不想检查脚本中每一行的返回码。 但是对于一个特定的命令,我想忽略该错误。我怎样才能做到这一点? 问题答案: 解决方案: 例: 将永远不会打印。 另外,我想补充一点,当打开时,如果管道中的命令之一具有非零退出代码(关闭该命令必须是最后一个),shell认为整个管道具有非零退出代码就足够了。

  • 问题内容: 标头中包含以下行: 这实际上改变了我的python日志记录设置,但是pylint认为这是未使用的导入。我一般不希望删除警告,因此可以忽略这一行吗? 我不介意为此项目准备一个,因此更改配置文件的答案将被接受。 否则,这样的事情也会受到赞赏: 问题答案: Pylint消息控件记录在Pylint手册中: 是否可以在本地禁用特定消息? 是的,此功能已在Pylint 0.11中添加。这可以通过

  • 我需要一些使用MapStruct映射嵌套POJO的帮助。我需要跳过/删除目标类中所有子类的特定字段。 例如,以下是我的目标POJO 所有这些子类——,,。。。包含一个字段“”,我想在映射时忽略它。这种结构使得这些类不共享包含此字段的公共基类——“”。 我创建的映射器如下所示: 这工作。 然而,当中的子类数量很大时,它会变得很乏味。我需要明确指定每个类。 有没有人能告诉我,这是否可以用一种更通用的方