将外部文件添加到生成文件

时间:2018-12-04 18:25:39

标签: c++ makefile

对于 makefiles 来说,我还是一个新手,因此我对此感到很陌生。我想知道是否有一种方法可以将另一个目录中的文件添加到 makefile

这是我想做的一个例子:

文件树:

Software
  |____Lab_1
  |     |____hola.cpp
  |     |____hola.hpp
  |     |____hola.o
  |
  |___Lab_2
        |____hey.cpp
        |____hey.hpp
        |____main.cpp
        |____makefile

我的makefile当前如下所示:

INC_DIR = ../Lab_1

all: hola.o hey.o main.o
    g++ hola.o hey.o main.o -o prog

point.o: hola.cpp hola.hpp
    g++ -c hola.cpp

hey.o: hey.cpp hey.hpp
    g++ -c hey.cpp

main.o: main.cpp
    g++ -c main.cpp

我想使用Lab_2中的makefile中Lab_1的内容,有什么办法吗?

先谢谢您。

1 个答案:

答案 0 :(得分:1)

将Makefile放在Software目录下,并使用变量,函数,隐式规则和依赖项自动生成来简化您的任务:

TARGET := prog
SOURCE := $(wildcard Lab_1/*.cpp) $(wildcard Lab_2/*.cpp)
OBJECT := $(SOURCE:.cpp=.o)
DEPEND := $(OBJECT:.o=.d)

CPPFLAGS := -MMD -MP -ILab_1

.PHONY: all

all: $(TARGET)

$(TARGET): $(OBJECT)
    $(CXX) -o $@ $^

-include $(DEPEND)

您是一个初学者,因此您需要学习更多以了解所有内容,但这是要点:

  • wildcard函数将在两个.cpp目录中列出所有扩展名为Lab的文件。 SOURCE将包含Lab_1/hola.cpp Lab_2/hey.cpp Lab_2/main.cpp;
  • OBJECT包含相同内容,但扩展名已替换为.o
  • DEPEND包含相同内容,但扩展名已替换为.d
  • CPPFLAGS变量包含预处理器使用的标志。 -MMD -MP标志指示g++(包含在$(CXX)中)生成.d文件(依赖文件),并且-include指令将包含它们,如果它们存在于文件系统;
  • $@$^automatic variables;在这种情况下,$@ = $(TARGET)$^ = $(OBJECT)