1

Makefile は私を混乱させます。私がやろうとしているのは、いくつかの関数を別のファイルに分離することだけですが、コンパイルできません。私は何が欠けていますか?ありがとう!

メイクファイル:

all: clientfunctions client

clientfunctions.o: clientfunctions.c
    gcc -c clientfunctions.c -o clientfunctions.o

client.o: client.c clientfunctions.o
    gcc -c client.c -o client.o

client: client.o
    gcc client.o -o client

.c および .h ファイルも非常に単純です。

clientfunctions.h

#ifndef _clientfunctions_h
#define _clientfunctions_h
#endif

void printmenu();

clientfunctions.c

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

void printmenu() {
    fprintf(stdout, "Please select one of the following options\n");
}

client.c

#include "clientfunctions.h"

int main (int argc, char * argv[])
{
    printmenu();
    return 0;
}

これは私が得ているエラーです:

Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [clientfunctions] Error 1

4

4 に答える 4

1

あなたは一生懸命働きすぎています。暗黙のルールに依存して、makefile を大幅に簡素化できます。その内容全体は (おそらく、使用している Make によって異なります)、次のように単純化できます。

client: client.o clientfunctions.o
于 2013-09-03T18:25:54.607 に答える
1

両方の .c ファイルをコンパイルし、両方を実行可能ファイルにリンクする必要があります。ターゲットに依存関係が必要であり、これを行うにはリンクにこのオブジェクトを含める必要がありclientfunctions.oますclient

client: client.o clientfunctions.o
    gcc client.o clientfunctions.o -o client
于 2013-09-03T18:17:29.923 に答える