Makefile,添加位于parent目录下的headers(里面不允许移动!)

Makefile, add headers located in parent directory (Not allowed to move inside!)

dir1
--- myheader1.h
--- myheader2.h
    src
    --- prog.c
    --- makefile

prog.c

#include <stdio.h>
#include "myheader1.h"
#include "myheader2.h"

int main()
{
    func1();
    func2();
    return 0;
}

myheader1.h

void func1()
{
    printf("Header1\n");
}

myheader2.h

void func2()
{
    printf("Header2\n");
}

寻找有关如何从 parent 目录添加 header 的解决方案,我发现了 this 问题。但这对我不起作用,我仍然收到找不到 header 文件的错误。

No rule to make target 'myheader1.h', needed by 'prog.o'. Stop.

生成文件

CFLAGS = -c -Wall -I.. myheader1.h

prog : prog.o
     cc -o prog prog.o

prog.o : prog.c myheader1.h
     cc $(CFLAGS) prog.c

我做错了什么?以及如何添加第二个 header 而不会使行变得非常长或丑陋?

prog.o : prog.c myheader1.h

这一行表示 prog.o 取决于两个文件,prog.cmyheader1.hprog.c 存在,但 myheader1.h 不存在(至少不在同一目录中)。

应该是

CFLAGS = -Wall -I..

prog.o : prog.c ../myheader1.h
        cc $(CFLAGS) -c prog.c

注:

  • ../myheader1.h 在先决条件列表中,而不是 myheader1.h
  • headers 根本不应在编译器命令行中列出
  • -c 不属于 CFLAGS