c++ - 将外部文件添加到 makefile

标签 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 的内容,有什么办法可以做到这一点吗?

提前致谢。

最佳答案

将您的 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函数将列出 Lab 目录中扩展名为 .cpp 的所有文件。 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)

关于c++ - 将外部文件添加到 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53619264/

相关文章:

c++ - 为什么这个递归模板不起作用?

c++ - STL 是否包含适用于数组的迭代器?

c++ - 在 OS X 上使用 yaml-cpp 时出现问题

c++ - 在每 0.1 秒调用一次的循环中仅执行一次函数 c++

c# - 如何为 C# 编写 makefile?

linux - 从 makefile 并行运行两个进程

c++ - 使用声明的命名空间(GCC/VS2010 中的错误)?

gcc - 尝试安装gcc-4.8.1时,使用 "Error 2"退出

node.js - 无法在 Debian 7 Wheezy (WM) 上安装 node.js

eclipse - 使: *** No rule to make target `main.o'