Linux 연구 노트: gcc 및 makefile의 간단한 사용

gcc와 만들기

gcc

gcc는 C, C++ 및 Objective-C용 컴파일 도구입니다. 일반적으로 프로그램을 실행하려면 컴퓨터가 실행할 수 있는 파일로 컴파일해야 합니다.

일반적인 명령 효과
gcc -o 파일 출력을 파일 파일에 넣고 실행 파일을 생성합니다.
gcc -c 대상 파일 생성.o
gcc -I 디렉토리 지정된 디렉토리에서 헤더 파일 검색

.c 파일과 사용된 .h 파일이 동일한 디렉터리에 있는 경우(표준 디렉터리의 헤더 파일 제외)
예:

$ tree
.
├── main.c
└── system.h

0 directories, 2 files
#main.c中调用了system.h的宏定义TIME=10
#main.c输出宏定义TIME

다음을 사용하여 직접gcc -o 실행 파일을 생성할 수도 있고, 먼저gcc -c.o 파일을 생성한 다음< a i=3> 실행 파일:gcc -o

$ gcc main.c -o prog
$ ls
main.c	prog  system.h
$ ./prog
time=10
或者
$ gcc -c main.c
$ gcc main.o -o prog

.cs가 여러 개인 경우gcc 1.c 2.c -o prog를 사용하세요.
.c 파일과 사용된 .h 파일이 동일한 디렉토리에 있지 않은 경우(표준 디렉토리의 헤더 파일 제외)

$ tree
.
├── main.c
└── system
    └── system.h

1 directory, 2 files

이때 직접 입력$ gcc main.c -o prog하면 오류가 발생합니다. (파일 system.h를 찾을 수 없습니다)

main.c:2:10: fatal error: system.h: No such file or directory
    2 | #include "system.h"
      |          ^~~~~~~~~~
compilation terminated.

이때 입력해야 합니다gcc -I system/ main.c -o prog 즉, 먼저 -I를 사용하여 시스템의 system.h와 같이 파일이 있는 디렉터리를 지정합니다.

$ gcc -I system/ main.c -o prog
$ ls
main.c	prog  system
$ ./prog
time=10
或者
$ gcc -I system/ -c main.c
$ gcc main.o -o prog

메이크파일

make의 주요 기능은 대상 프로그램의 새 버전을 생성하는 데 필요한 단계를 수행하는 것입니다. 즉, 대규모 프로그램의 어느 부분을 재컴파일해야 하는지 자동으로 감지한 다음 이를 재컴파일하는 명령을 실행하는 것입니다. , 주로 다음을 생성하기 위해 makefile 파일을 사용하여 연결합니다. Makefile 파일은 일반적으로 makefileMakefile로 끝납니다. ,GNUmakefile이름이 지정되었습니다.
메이크파일 뒤에 오는 형식:

目标文件:[相依文件...]
<tab>命令[#注释]
目标文件:[相依文件...]
<tab>命令[#注释]
...

참고: 명령을 실행하기 전에 키보드의 Tab 키를 누르라는 의미입니다!!!
그렇지 않으면 makefile이 잘못된 형식의 파일이 되어 오류가 발생합니다. 실행 시 보고됩니다.

makefile의 예를 들어보세요.
prog는 main.o에 의해 생성되고, main.o는 main.c에 의해 생성됩니다.
추가적으로 한 줄은 해당 생성 명령어이다.

prog:main.o
	gcc main.o -o prog
main.o:main.c
	gcc main.c -c

.h 파일과 .c 파일이 모두 같은 디렉터리에 있는 경우
현재 디렉터리에

$ tree
.
├── add.c
├── add.h
├── main.c
├── subtract.c
├── subtract.h
└── system.h

0 directories, 6 files

종속성은 다음과 같습니다.

main.c system.h add.c 빼기.c
시스템.h add.h 빼기.h
추가.c 추가.h
빼기.c 빼기 .h

이제 prog를 컴파일하고 생성하기 위한 makefile을 작성합니다.

prog:main.o add.o subtract.o
        gcc main.o add.o subtract.o -o prog
main.o:main.c system.h
        gcc -c main.c
add.o:add.c
        gcc -c add.c
subtract.o:subtract.c
        gcc -c subtract.c

작업 결과:

$ make
gcc -c main.c
gcc -c add.c
gcc -c subtract.c
gcc main.o add.o subtract.o -o prog
$ ls
Makefile  add.h  main.c  prog	     subtract.h  system.h
add.c	  add.o  main.o  subtract.c  subtract.o
$ ./prog
num1=3,num2=1$ 

.c 및 .h 파일이 동일한 디렉토리에 없는 경우:

$ tree
.
├── main.c
└── my_math
    ├── my_math.c
    └── my_math.h

1 directory, 3 files

종속성은 다음과 같습니다.

main.c my_math.c my_math.h
my_math.c my_math.h

이제 prog를 컴파일하고 생성하기 위한 makefile을 작성합니다.

prog:main.o my_math.o
        gcc my_math.o main.o -o prog
main.o:main.c my_math/my_math.h
        gcc -I my_math/ -c main.c
my_math.o:my_math/my_math.c
        gcc -c my_math/my_math.c

실행 결과는 다음과 같습니다.

$ make
gcc -I my_math/ -c main.c
gcc -c my_math/my_math.c
gcc my_math.o main.o -o prog
$ ls
Makefile  main.c  main.o  my_math  my_math.o  prog
$ ./prog
num1=3,num2=1

추천

출처blog.csdn.net/darlingqx/article/details/127515644