首页 > 解决方案 > 在 Makefile 先决条件中包含头文件的原因

问题描述

我正在阅读这个制作教程。在这里,他们在先决条件中提到了头文件。这真的有必要吗?我运行没有标题的相同代码并且它有效。例如,我有以下代码

funcs.h

#ifndef FUNCS_H
#define FUNCS_H

int add(int a, int b);

#endif

funcs.cpp

#include "funcs.h"

int add(int a, int b){
    return a+b;
}

main.cpp

#include<iostream>
#include "funcs.h"


int main(){
    std::cout << add(1,2) << "\n";
}

Makefile

add : main.o funcs.o
    g++ -o add main.o funcs.o

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

funcs.o : funcs.cpp funcs.h
    g++ -c funcs.cpp

clean :
    rm add main.o funcs.o

即使我从funcs.omain.o目标中删除头文件,它仍然有效。那么,还有其他原因为什么要放置头文件吗?

标签: c++makefile

解决方案


makefile 中冒号后面的文件名是目标的依赖项。Make 检查它们,如果任何依赖项比目标更新,则使用下一行的命令重新构建目标。

因此,当然,当您从依赖项中删除头文件时,您仍然可以构建和运行,但如果您只更改头文件中的某些内容,make 将不会正确地重新构建所有目标。


推荐阅读