gpt4 book ai didi

makefile - 使用 -MM 在 Makefile 中生成依赖项的问题

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

我是 Makefiles 和 g++ 的新手,在使用 -MM 标志生成项目文件的依赖项时遇到了一个问题。我正在发布我正在使用的 Makefile 供您考虑。请看一下。

OUTPUT_ROOT := output/
SOURCE_ROOT := source/

TITLE_NAME := TestProj

SOURCES := \
MyFile.cpp \
stdAfx.cpp \
Main.cpp \

OUT_DIR := $(OUTPUT_ROOT)

OUT_O_DIR := $(OUT_DIR)

OBJS = $(SOURCES:%.cpp=$(OUT_O_DIR)%.o)
DEPS = $(OBJS:%.o=%.d)
DIRS = $(subst /,/,$(sort $(dir $(OBJS))))
SOURCE_TARGET = $(SOURCES:%.cpp=$(SOURCE_ROOT)%.cpp)
OUTPUT_TARGET = $(OUT_DIR)$(TITLE_NAME)

#---------------------------------------------------------------------
# executables
#---------------------------------------------------------------------
MD := mkdir -p
RM := rm
CC := g++

#---------------------------------------------------------------------
# rules
#---------------------------------------------------------------------
.PHONY: clean directories objects title

all: directories objects title

directories:
@$(MD) $(DIRS)

clean:
$(RM) -rf $(OUT_DIR)

$(OBJS): $(SOURCE_TARGET)
@$(CC) -c $< -o $@

$(DEPS): $(SOURCE_TARGET)
@$(CC) -c -MM $< > $(DEPS)

-include $(DEPS)

objects:$(OBJS) $(DEPS)

title: $(OBJS)
@$(CC) $< -o $@

我尝试了几种选择,而且很多次。我用谷歌搜索了解决方案,但找不到任何解决方案。

使用“-MM”标志生成依赖项是正确的选择吗??如果没有,请建议我生成依赖项的正确方法。我想自动生成依赖项,因为我的项目会有很多文件。我认为这是比手动写下每个依赖项更好的选择。

这些是我得到的错误
g++: stdAfx.d: No such file or directory
g++: Main.d: No such file or directory
make: *** No rule to make target `stdAfx.d', needed by `objects'. Stop.

提前致谢。

最佳答案

看起来您正在尝试为每个 .cpp 文件生成一个依赖文件(根据您的 makefile 规则称为 *.d)。这不是我对如何使用依赖文件的理解。

使用 -M 选项为您的项目生成单个依赖项文件,然后包含该依赖项文件。

DEPS = $(OUR_DIR)/make.dep

$(DEPS): $(SOURCE_TARGET)
@$(CC) -M $(SOURCE_TARGET) > $(DEPS)

include $(DEPS)

编辑 你的依赖文件也应该依赖你的头文件
$(DEPS): $(SOURCE_TARGET) $(HEADER_TARGET)
@$(CC) -M $(SOURCE_TARGET) > $(DEPS)

其中 HEADER_TARGET 的定义与 SOURCE_TARGET 相同。这样,当头文件改变时,依赖文件被重建。

关于makefile - 使用 -MM 在 Makefile 中生成依赖项的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1979912/

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