gpt4 book ai didi

c++ - Makefile中的隐式规则中的-c标志出现错误

转载 作者:行者123 更新时间:2023-12-02 10:31:08 26 4
gpt4 key购买 nike

我正在学习makefile,并且试图通过使用隐式规则来减少我的makefile。到目前为止,这就是我所拥有的:

CC = /usr/bin/g++
OBJECTS_INTERACTIVE = calcular.o calc_interactive.o

calc_interactive: $(OBJECTS_INTERACTIVE)
$(CC) $(OBJECTS_INTERACTIVE) -o $@

calcular.o: calcular.c calcular.h
$(CC) -c calcular.c

calc_interactive.o: calcular.h calc_interactive.c
$(CC) -c calc_interactive.c

如果我这样运行,就不会出错。但是,我想使用像 calcular.o: calcular.h这样的隐式规则,该AFAIK在后台执行 g++ -c calcular.c,但显然,它执行的命令没有 -c标志,我认为这是关键,我没有设法g++在使用隐式规则时使用 -c标志。这是我要实现的目标:
CC = /usr/bin/g++
OBJECTS_INTERACTIVE = calcular.o calc_interactive.o

calc_interactive: $(OBJECTS_INTERACTIVE)
$(CC) $(OBJECTS_INTERACTIVE) -o $@

calcular.o: calcular.h

calc_interactive.o: calcular.h

它产生此错误:
jules@desktop:$ make
/usr/bin/g++ -c calc_interactive.c
/usr/bin/g++ calcular.o calc_interactive.o -o calc_interactive
g++: error: calcular.o: No such file or directory
makefile:11: recipe for target 'calc_interactive' failed
make: *** [calc_interactive] Error 1
编辑:所有文件的详细粘贴框
https://pastebin.com/FZy5kqzj

最佳答案

首先,请勿使用C++编译器编译C源代码,除非您确定它严格使用这两种语言的通用子集编写。 C和C++各自具有彼此缺乏的功能,并且可以编写符合两种语言但对每种语言具有不同含义的代码。除非您有意识且有足够的心血来编写双语言代码,否则请对C代码使用C编译器。

其次,如果使用make,则完全使用以下makefile:

CC = /usr/bin/g++
OBJECTS_INTERACTIVE = calcular.o calc_interactive.o

calc_interactive: $(OBJECTS_INTERACTIVE)
$(CC) $(OBJECTS_INTERACTIVE) -o $@

calcular.o: calcular.h

calc_interactive.o: calcular.h


产生您要求的输出:

jules@desktop:$ make
/usr/bin/g++ -c calc_interactive.c
/usr/bin/g++ calcular.o calc_interactive.o -o calc_interactive
g++: error: calcular.o: No such file or directory
makefile:11: recipe for target 'calc_interactive' failed
make: *** [calc_interactive] Error 1


那么最有可能得出的结论是 calcular.o不存在,并且不存在 make知道如何构建它的源文件。特别是,没有 calcular.c。这意味着原始的makefile也将不再起作用。也许您不小心删除了源文件,或者在文件名或生成文件或类似文件中引入了拼写错误。

我认为 g++的错误消息还有一种误导性。如果 calcular.o已经存在并且是最新的,但是其访问控制属性阻止您打开它进行读取,则 make不会尝试对其进行重建,但是 g++可能会发出误导性的诊断,其中“实际上没有此类文件或目录”表示“我无法打开此类文件”。在那种情况下,删除 calcular.o,以便 make需要重建它,可能是最干净的解决方案。

关于c++ - Makefile中的隐式规则中的-c标志出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62222399/

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