鉱山には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
現在のディレクトリのファイルと一致する必要があります。