1. ホーム
  2. c

[解決済み] Makefileのインクルードヘッダー

2022-02-06 05:18:54

質問

私はLinuxプログラミングの初心者で、簡単なテスト構築をコンパイルしようとしました。しかし、コンパイル時にエラーが発生します。inc.cも(app:の行に)追加してもうまくいきません。どのように私は正しいファイルを含めるべきでしょうか?

Makefileを参照してください。

app: main.c inc.h
    cc -o app main.c

端末です。

make
cc -o app main.c
/tmp/ccGgdRNy.o: In function `main':
main.c:(.text+0x14): undefined reference to `test'
collect2: error: ld returned 1 exit status
make: *** [app] Error 1

main.c:

#include <stdio.h>
#include "inc.h"

int main()
{
    printf("Kijken of deze **** werkt:\n");
    test();

    getchar();
    return 0;
}

inc.h

#ifndef INCLUDE_H

#define INCLUDE_H

void test();

#endif

inc.c

#include <stdio.h>

void test()
{
    printf("Blijkbaar wel!");
}

解決方法は?

コンパイルユニットに対してリンクする必要があります inc.o をコンパイルして得た inc.c .

一般に、このことは、以下の関数が含まれるすべてのオブジェクトファイルを提供しなければならないことを意味します。 main.c (推移的に)。の暗黙のルールでこれらをコンパイルすることができます。 make 余計なルールを指定する必要はありません。

と言えるでしょう。

app: main.c inc.o inc.h
    cc -o app inc.o main.c

そして make をどのようにコンパイルするかは、自分自身で知ることができます。 inc.o から inc.c しかし、それは ない 取る inc.h を決定する際に考慮されます。 inc.o をリビルドする必要があります。そのためにあなたは する は、独自のルールを指定する必要があります。