gpt4 book ai didi

c - make 没有找到创建目标的规则(手动生成文件的新手)

转载 作者:行者123 更新时间:2023-12-04 06:13:27 26 4
gpt4 key购买 nike

我有以下我试图从教程中构建的 makefile。然后我(认为)我添加了必要的来源以适合我的代码......但它没有找到目标。我认为这可能与源的文件夹结构有关,但我无法弄清楚。

SVN_REV=(svnversion -cn | sed -e 's/.*://' -e 's/\([0-9]*\).*/\1/' | grep '[0-9]')

DEBUG_OPTS:=-g -DSVN_REV \
-DDEBUG_MODE \
-UTIME_MODE \
-UREADFROMFILE

CFLAGS:=$(DEBUG_OPTS) -c -Wall
LDFLAGS:=$(DEBUG_OPTS) -lpthread

EXECUTABLE:=fw_board
COMPILER:=arm-linux-gcc

(makefile 在下面,有从 TOPDIR 看到的 src 文件位置)
SOURCES:=main_process/main.c \
ezxml/ezxml.c \
info_file_parser/info_file_parser.c \
info_file_parser/array_management.c \
info_file_parser/protocol_file_parser.c \
info_file_parser/sequence_file_parser.c \
info_file_parser/topology_file_parser.c \
seq_exec_module/seq_execution.c \
i2c_device_drivers/pca950x.c \
i2c_device_drivers/ltc2495.c \
i2c_device_drivers/ltc2609.c \
i2c_device_drivers/temperature_uc.c \
i2c_device_drivers/pcf8574.c \
i2c_device_drivers/stepper_motor_control.c \
i2c_device_drivers/test_functions.c \
i2c_device_drivers/stepper_pca.c \
i2c_device_drivers/stepper_atmega.c \
i2c_device_drivers/general_i2c.c \
i2c_device_drivers/zx_mbd_pwr.c \
i2c_device_drivers/virtual_switch_handler.c \
i2c_device_drivers/pressure_sensor_ASDXAV030PG7A5.c \
hashing/ConfigData.c \
hashing/Hash.c \
hashing/LinkedList.c \
init_file_parser/init_file_parser.c \
usb_communication/serial_comm.c \
protocol_parser/protocol_parser.c


BINDIR:=bin
OBJDIR:=.obj
OBJECTS:=$(addprefix $(OBJDIR)/,$(SOURCES:%.c=%.o))

.PHONY: all
all: $(SOURCES) $(EXECUTABLE)
@echo all_start

这是链接阶段
$(EXECUTABLE): $(OBJECTS) | $(BINDIR)
@echo link
$(COMPILER) $(LDFLAGS) $(OBJECTS) -o $(BINDIR)/$@

和编译阶段。但是你会看到 main.c 无法定位
$(OBJECTS): $(OBJDIR)/%.o : %.c | $(OBJDIR)
@echo compile
$(COMPILER) $(CFLAGS) $< -o $@

$(OBJDIR):
mkdir $(OBJDIR)

$(BINDIR):
mkdir $(BINDIR)

.PHONY: clean
clean:
@echo removing_files
rm -rf $(OBJECTS) $(BINDIR)/$(EXECUTABLE)

运行 make 返回以下内容:
make: *** No rule to make target `main_process/main.c', needed by `all'.  Stop.

最佳答案

不要将来源列为所有人的依赖项。

全部:取决于 $(EXECUTABLE)。顺便说一句, echo 只会在 $(EXECUTABLE) 构建后获得输出(如果有的话)。

$(EXECUTABLE): 取决于 $(OBJECTS)

我不太确定你的 $(OBJECTS) 规则的语法是做什么的,但没有必要对 $(OBJECTS) 有明确的规则。只需让 $(OBJECTS) 列出所有目标文件,然后使用规则从 C 文件生成它们就足够了。

有了所有这些规则,“所有:”无论如何都隐含地依赖于来源。此外,“all:”是一个“虚假”规则,因此无论如何每次都会重建所有依赖项。

路径 main_process/main.c 需要相对于包含 makefile 的目录存在。

解决所有这些问题,您就可以开始工作了。

关于c - make 没有找到创建目标的规则(手动生成文件的新手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7515695/

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