首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用多个目录构造Makefiles

用多个目录构造Makefiles
EN

Stack Overflow用户
提问于 2013-08-14 09:44:11
回答 2查看 1.7K关注 0票数 2

我正在试图编译具有以下结构的项目

项目:

  • MakeFile
  • 可执行文件
  • Source1
    • .cxx
    • .h

  • Source2
    • .cxx
    • .h

  • 构建
    • *.o

而且我很难编写一个Makefile来编译。我现在有这样的命令:

代码语言:javascript
复制
Src1 = $(wildcard $(SRCDIR1)/*.cxx)
Obj1 = $(patsubst $(SRCDIR1)/%.cxx, $(OBJDIR)/%.o, $(Src1))

但是,我很难为对象文件( a)制定编译规则,因为我再也不能这样做了:

代码语言:javascript
复制
$(Obj1): %.cxx
    $(CXX) $(CFLAGS) -c $(@:.o=.cxx) -o $@

因为'$@‘命令现在包括构建目录的路径和b),因为先决条件现在包括构建路径,我应该有一个源路径。我已经阅读了大量的制作手册,试图找到一个解决方案,但没有运气。任何对解决方案的帮助都很感激!杰克

EN

回答 2

Stack Overflow用户

发布于 2013-08-14 10:26:59

根据个人经验,在玩过“原始”Makefiles之后,我建议您使用一些工具来构建Makefile,比如自动机cmake

您仍然需要手动指定所有源文件--但至少我更喜欢手动处理Makefile。

票数 0
EN

Stack Overflow用户

发布于 2013-08-14 10:47:07

我更喜欢的一个选择是在build目录中构建同构目录结构。也就是说,源文件${src_dir}/project_x/main.cxx内置到${build_dir}/project_x/main.o中。这样,当不同的源目录中有同名的源文件时,就可以保护您免受名称冲突的影响。编译器规则看起来类似于:

代码语言:javascript
复制
${obj_dir}/%.o : ${src_dir}/%.cxx # % includes directory name, e.g. project_x/main
    @-mkdir -p ${@D}
    ${CXX} -c -o $@ ${CPPFLAGS} ${CXXFLAGS} $<

注意在上面它是如何动态地创建目标目录的。这有点简单,在一个实际的构建系统对象文件依赖于它的目录(使用订单依赖),因此make自动创建目标目录如果它不存在,而不是投机性地尝试为每个目标对象文件创建它们,即使它已经存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18228319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档