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

程序
#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");
}

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



生成文件
CFLAGS = -c -Wall -I.. myheader1.h

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

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

我做错了什么?以及如何在不使行变得非常长或丑陋的情况下添加第二个标题?

最佳答案

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
  • 不应在所有的编译器命令行上列出
  • header
  • -c并不真正属于CFLAGS
  • 关于c - Makefile,添加位于父目录中的 header (不允许在内部移动!),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52651873/

    10-10 11:35