gpt4 book ai didi

makefile - 替换生成文件的 $(SOURCES) 中的文件夹路径

转载 作者:行者123 更新时间:2023-12-03 22:45:13 28 4
gpt4 key购买 nike

我正在寻找一种方法来替换 makefile 中源文件变量列表中的文件夹。

有什么可以在这里工作的吗?

我首先找到我的源文件

program_C_SRCS := $(wildcard  $(SRCDIR)/*.c)
program_CXX_SRCS := $(wildcard $(SRCDIR)/*.cpp)

结果(如果我正确理解 GNU 生成文件)通常看起来像

src/main.cpp
src/sensor.cpp



然后我通过目标文件构建
program_C_OBJS := ${program_C_SRCS:.c=.o}
program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.opp}

这按预期替换了我的源文件的扩展名。

最后,我想用“obj/”替换“src/”
program_C_OBJPATH := ${subst $(SRCDIR) , $(OBJDIR) , $(program_C_OBJS)}
program_CXX_OBJPATH := ${subst $(SRCDIR) , $(OBJDIR) , $(program_CXX_OBJS)}

但是,这不起作用。

我已经浏览了 GNU makefile 网站,但无济于事。此解决方案 Makefile to put object files from source files different directories into a single, separate directory?接近但对象目录必须明确包含在任何地方,并且源目录不包含源路径信息。

在我的 makefile 中,源文件列表包含路径,我希望目标文件列表也包含相应的目标目录。

makefile 的其余部分也尝试使用变量

连接阶段
$(program_NAME): $(program_OBJS)
$(CXX) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $(program_OBJS) -o "$(program_NAME)"

编译阶段
%.opp : %.cpp | mkdirobjdir
$(CXX) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -o "$@" "$<"

最后是规则
main_enose.opp : main_enose.cpp core_enose.cpp core_enose.h
$(OBJDIR)/core_enose.opp : core_enose.cpp core_enose.h
$(OBJDIR)/core_enose.h :

最佳答案

您的问题是 $(subst) 中逗号周围的空格调用。 make 并没有像您期望的那样忽略它们。它将它们视为要查找的字符串中的文字值、要替换的字符串和要进行替换的字符串。

删除它们。

program_C_OBJPATH := ${subst $(SRCDIR),$(OBJDIR),$(program_C_OBJS)}
program_CXX_OBJPATH := ${subst $(SRCDIR),$(OBJDIR),$(program_CXX_OBJS)}

也就是说你可能想要使用 $(patsubst) 限制替换发生的位置:
program_C_OBJPATH := $(patsubst $(SRCDIR)/%,$(OBJDIR)/%,$(program_C_OBJS))
program_CXX_OBJPATH := $(patsubst $(SRCDIR)/%,$(OBJDIR)/%,$(program_CXX_OBJS))

或者您想使用 $(notdir) $(addprefix) 处理剥离所有目录信息并将其添加回来:
program_C_OBJPATH := $(addprefix $(OBJDIR)/,$(notdir $(program_C_OBJS)))
program_CXX_OBJPATH := $(addprefix $(OBJDIR)/,$(notdir $(program_CXX_OBJS)))

关于makefile - 替换生成文件的 $(SOURCES) 中的文件夹路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204756/

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