C / C ++ Makefile:如何在.c文件与其他目录中的目标文件之间建立依赖关系?

哈维·登特

这是我的.c和.o文件层次结构:

---/src/IRBuild/main.c
                func1.c
                func2.c
---/inclue/main.h
           func1.h
           func2.h

---/build/IRBuild/main.o
                  func1.o
                  func2.o 
                  irbuild

以下是〜/ src / IRBuild /下的我的Makefile,我已经使用.c和.h文件构建了编译依赖项,这意味着无论何时更改.c或.h文件。“ make”将重建目标文件。但是,因为我将.o文件输出到〜/ build / IRBuild /而不是当前目录,所以每次执行make时,“ make”都会重建所有.o文件。

如何使用其他目录中的.o文件构建依赖关系?仅在更改.c,.h或.o文件时重新编译特定文件?

在这里停留了两天,非常感谢!

   EXE=irbuild

# G++ as default compiler
CC=g++

# Compile time flags
CXXFLAGS = -g -Wall

# Library paths in addition to /usr/lib
LFLAGS=-std=c++0x

# Libraries to link into executable:
#LIBS = -lmylib -lm

# Include files directory other than /usr/include
INCLUDES=-I../../include/

SRC=$(wildcard *.cpp)
OBJ=$(SRC:.cpp=.o)
DEP=$(OBJ:.o=.d)
BUILD=../../build/IRBuild
TESTS=../../tests/

OBJS :=$(foreach obj, $(OBJ), $(BUILD)/$(obj))

.PHONY: depend clean

all: $(EXE)
        cp $(EXE) $(TESTS)
$(EXE): $(OBJ)
        $(CC) $(CXXFLAGS) $(LFLAGS) $(INCLUDES) -o $(EXE) $(OBJS)

.cpp.o:
        $(CC) $(CXXFLAGS) $(LFLAGS) $(INCLUDES) -c $< -o $(BUILD)/$@

clean:
        rm -f $(OBJS) $(DEP) $(EXE)

depend: .depend
.depend: $(SRC)
        rm -f ./.depend
        $(CC) $(CXXFLAGS) $(LFLAGS) $(INCLUDES) -MM $^ -MF ./.depend;
include .depend
   

伊坦·赖斯纳

您违反了规则2,http://make.mad-scientist.net/rules.html因此为什么规则2认为它们不存在就一直重建它们。$(OBJ)在先决条件和$(OBJS)配方链接行中列出的内容也有点makefile“气味”。)

您需要使用一条规则,该规则将目标文件正确映射到其先决条件。

手动或使用vpath

有多种方法可以使手动方法起作用,具体取决于您要花费多少精力进行设置。vpath方法可能会容易一些。

使用vpath应该只需要使用$(OBJS)作为$(EXE)先决条件,然后添加vpath %.cpp .vpath %.h ../../include或类似的东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++文件的#ifdef中使用Makefile中的变量

来自分类Dev

如何在make中管理c文件的依赖关系

来自分类Dev

如何在C中的其他目录中运行可执行文件?

来自分类Dev

如何在其他目录中的.c中包含头文件

来自分类Dev

如何在C中的其他目录中运行可执行文件?

来自分类Dev

C ++ Makefile依赖性:目标文件依赖哪些文件?

来自分类Dev

C#将文件重命名为与其他目录中的文件相同的名称

来自分类Dev

在C语言中,我如何从文件中扫描并与其他扫描进行比较

来自分类Dev

在C中,如何在Makefile中禁用优化?

来自分类Dev

在C中,如何在Makefile中禁用优化?

来自分类Dev

如何在makefile中包含-std = c ++ 11和-lpthread?

来自分类Dev

如何在C(LINUX)中使用makefile执行特定部分

来自分类Dev

如何在C(LINUX)中使用makefile执行特定部分

来自分类Dev

如何在“ Unix as IDE”理念下处理C makefile?

来自分类Dev

如何使用Makefile在目录中编译多个单独的C文件?

来自分类Dev

如何获得目标c中目录中文件的创建日期

来自分类Dev

头文件和makefile如何在c ++中帮助增量编译?

来自分类Dev

如何在C#解决方案中引用其他文件夹中的文件

来自分类Dev

如何在C#解决方案中引用其他文件夹中的文件

来自分类Dev

带有OpenGL的其他h文件依赖项的makefile c ++

来自分类Dev

从目标中的其他plist文件读取值-C

来自分类Dev

如何为C源文件生成makefile

来自分类Dev

如何为C源文件生成makefile

来自分类Dev

如何使用 Makefile 设置输入文件?(C)

来自分类Dev

如何在目标C文件中访问Swift公共功能?

来自分类Dev

如何制作合适的 C makefile

来自分类Dev

如何从C#中的其他文件调用方法?

来自分类Dev

了解Makefile的依赖关系(C ++)

来自分类Dev

如何在C中的目录中查找文件

Related 相关文章

  1. 1

    如何在C ++文件的#ifdef中使用Makefile中的变量

  2. 2

    如何在make中管理c文件的依赖关系

  3. 3

    如何在C中的其他目录中运行可执行文件?

  4. 4

    如何在其他目录中的.c中包含头文件

  5. 5

    如何在C中的其他目录中运行可执行文件?

  6. 6

    C ++ Makefile依赖性:目标文件依赖哪些文件?

  7. 7

    C#将文件重命名为与其他目录中的文件相同的名称

  8. 8

    在C语言中,我如何从文件中扫描并与其他扫描进行比较

  9. 9

    在C中,如何在Makefile中禁用优化?

  10. 10

    在C中,如何在Makefile中禁用优化?

  11. 11

    如何在makefile中包含-std = c ++ 11和-lpthread?

  12. 12

    如何在C(LINUX)中使用makefile执行特定部分

  13. 13

    如何在C(LINUX)中使用makefile执行特定部分

  14. 14

    如何在“ Unix as IDE”理念下处理C makefile?

  15. 15

    如何使用Makefile在目录中编译多个单独的C文件?

  16. 16

    如何获得目标c中目录中文件的创建日期

  17. 17

    头文件和makefile如何在c ++中帮助增量编译?

  18. 18

    如何在C#解决方案中引用其他文件夹中的文件

  19. 19

    如何在C#解决方案中引用其他文件夹中的文件

  20. 20

    带有OpenGL的其他h文件依赖项的makefile c ++

  21. 21

    从目标中的其他plist文件读取值-C

  22. 22

    如何为C源文件生成makefile

  23. 23

    如何为C源文件生成makefile

  24. 24

    如何使用 Makefile 设置输入文件?(C)

  25. 25

    如何在目标C文件中访问Swift公共功能?

  26. 26

    如何制作合适的 C makefile

  27. 27

    如何从C#中的其他文件调用方法?

  28. 28

    了解Makefile的依赖关系(C ++)

  29. 29

    如何在C中的目录中查找文件

热门标签

归档