make コマンドは実行ファイルを生成しません。

make コマンドは実行ファイルを生成しません。

鉱山にはMakefile以下が含まれます。

CC=gcc
CFLAGS=-Wall

main: hello.o hello_fn.o

clean:
   rm -f main hello.o hello_fn.o

実行可能ファイルを生成する必要がありますがmain(Brian Goughの「GCCの紹介」で読みました)そうではありません。

出力は次のようになります。

$ make
gcc -Wall -c -o hello.o main.c
gcc -Wall -c -o hello_fn.o hello_fn.c
gcc hello.o hello_fn.o -o main

しかし、実際にはこれです。

$ make
gcc -Wall   -c -o hello.o hello.c
gcc -Wall   -c -o hello_fn.o hello_fn.c

再入力すると$ makeと出ます'main' is up to date

現在のディレクトリのファイル:

$ ll
total 24
drwxr-xr-x  2 rodion rodion 4096 Oct  4 15:39 ./
drwxr-x--- 13 rodion rodion 4096 Oct  4 15:39 ../
-rw-r--r--  1 rodion rodion  104 Oct  4 00:29 hello_fn.c
-rw-r--r--  1 rodion rodion   31 Oct  4 00:21 hello.h
-rw-r--r--  1 rodion rodion   84 Oct  4 00:28 main.c
-rw-r--r--  1 rodion rodion   84 Oct  4 12:18 Makefile

makeバージョン:

$ make -v
GNU Make 4.3
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

すべてのファイルの内容:

$ cat hello.c

#include "stdio.h"
#include "hello.h"

int main ()
{
   hello ("world");
   return 0;
}
$ cat hello_fn.c

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

void hello (const char * name)
{
   printf ("Hello %s\n", name);
}
$ cat hello.h

void hello(const char * name);

答え1

あなたが意味すると仮定このファイル、最初の質問はMakefileあなたの質問と全く同じではありません。

CC = gcc
CFLAGS = -Wall

main: main.o hello_fn.o

clean:
    rm -f main main.o hello_fn.o

main持つmain.oそしてhello_fn.o前提条件として、no.repairはジョブをhello.o作成しますMakefile

これは次のように異なります。GNU Makeに組み込まれたルール、形式は次のとおりです。

x: y.o z.o

予想するx.c存在し、構築可能y.oですz.o。したがって、バイナリターゲットの名前は.c現在のディレクトリのファイルと一致する必要があります。

関連情報