광산에는 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
현재 디렉터리의 파일과 일치해야 합니다.