Makefile, добавьте заголовки, расположенные в родительском каталоге (не разрешается перемещаться внутри!) - PullRequest
0 голосов
/ 04 октября 2018
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");
}

Ища решение о том, как добавить заголовок из родительского каталога, я обнаружил этот вопрос.Но у меня это не сработало, и я все еще получаю ошибку, не найдя заголовочный файл.

Нет правила для создания цели 'myheader1.h', необходимой для 'prog.o'.Стоп.

makefile

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

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

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

Что я делаю неправильно?и как добавить второй заголовок, не делая строки идти очень долго или некрасиво?

1 Ответ

0 голосов
/ 04 октября 2018
prog.o : prog.c myheader1.h

В этой строке указано, что prog.o зависит от двух файлов, prog.c и myheader1.h.prog.c существует, но myheader1.h нет (по крайней мере, не в том же каталоге).

Это должно быть

CFLAGS = -Wall -I..

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

Примечание:

  • ../myheader1.h в списке предварительных условий, а не myheader1.h
  • заголовки не должны быть перечислены в командной строке компилятора вообще
  • -c на самом деле не принадлежит CFLAGS
...