我正在试图编译具有以下结构的项目
项目:
而且我很难编写一个Makefile来编译。我现在有这样的命令:
Src1 = $(wildcard $(SRCDIR1)/*.cxx)
Obj1 = $(patsubst $(SRCDIR1)/%.cxx, $(OBJDIR)/%.o, $(Src1))但是,我很难为对象文件( a)制定编译规则,因为我再也不能这样做了:
$(Obj1): %.cxx
$(CXX) $(CFLAGS) -c $(@:.o=.cxx) -o $@因为'$@‘命令现在包括构建目录的路径和b),因为先决条件现在包括构建路径,我应该有一个源路径。我已经阅读了大量的制作手册,试图找到一个解决方案,但没有运气。任何对解决方案的帮助都很感激!杰克
发布于 2013-08-14 10:26:59
根据个人经验,在玩过“原始”Makefiles之后,我建议您使用一些工具来构建Makefile,比如自动机或cmake。
您仍然需要手动指定所有源文件--但至少我更喜欢手动处理Makefile。
发布于 2013-08-14 10:47:07
我更喜欢的一个选择是在build目录中构建同构目录结构。也就是说,源文件${src_dir}/project_x/main.cxx内置到${build_dir}/project_x/main.o中。这样,当不同的源目录中有同名的源文件时,就可以保护您免受名称冲突的影响。编译器规则看起来类似于:
${obj_dir}/%.o : ${src_dir}/%.cxx # % includes directory name, e.g. project_x/main
@-mkdir -p ${@D}
${CXX} -c -o $@ ${CPPFLAGS} ${CXXFLAGS} $<注意在上面它是如何动态地创建目标目录的。这有点简单,在一个实际的构建系统对象文件依赖于它的目录(使用订单依赖),因此make自动创建目标目录如果它不存在,而不是投机性地尝试为每个目标对象文件创建它们,即使它已经存在。
https://stackoverflow.com/questions/18228319
复制相似问题