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

관련 정보