【发布时间】:2015-12-10 14:42:59
【问题描述】:
我正在寻找一种方法来替换 makefile 中源文件变量列表中的文件夹。
这里有什么有用的吗?
我从查找源文件开始
program_C_SRCS := $(wildcard $(SRCDIR)/*.c)
program_CXX_SRCS := $(wildcard $(SRCDIR)/*.cpp)
结果(如果我正确理解 GNU makefile)通常看起来像
src/main.cpp
src/sensor.cpp
然后我通过目标文件构建
program_C_OBJS := ${program_C_SRCS:.c=.o}
program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.opp}
这将按照预期替换我的源文件的扩展名。
最后,我想将“src/”替换为“obj/”
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 :
【问题讨论】:
标签: makefile