gcc-cとgcc-oおよびパラメータを付けない違い


一、問題の説明
makefileのチュートリアルを見ていると、私が出会ったように、陳皓(CSDN)先輩のチュートリアルを見ているかもしれません.
https://seisman.github.io/how-to-write-makefile/overview.html
質問を貼り出します.makefileにはこう書かれています.

edit : main.o kbd.o command.o display.o /
           insert.o search.o files.o utils.o
    cc -o edit main.o kbd.o command.o display.o /
           insert.o search.o files.o utils.o

, , makefile(Ⅰ),


edit : main.o
    gcc -o edit main.o

makefile , makefile(Ⅱ):


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

, , , makefile(Ⅱ) main.o , edit , shell makefile(Ⅱ) gcc , main.o:


gcc -o main.o main.c

makefile(Ⅰ) :


gcc -o edit main.o


/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

 

, main , main ? , 。 ?

, , C :

https://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html

 

C 4 。 GCC , , 、 、 、 。

1、

, 、 、 。 “#” 。

gcc -E , :


gcc -E main.c > main.i

main.c main.i 。

2、

, 。 , 。


gcc -S main.i -o main.s

main.i main.s

3、

”.s” 。


gcc -c main.s -o main.o

main.s main.o 。

4、

, 。 、 、 , 。


gcc main.o -o main.exe

main.o main.exe
 

, :


gcc -o edit main.o

main.o gcc -o main.o main.c , main.o .o , 。 .obj ! .out ! !

 

、gcc -c gcc -o

gcc --help (gcc version 7.3.0):


-c               Compile and assemble, but do not link.
-o         Place the output into .
                 'none' means revert to the default behavior of guessing the language based on the file's extension.


-c                ,     。
-o          。
'   '                           。

 

1、 gcc


gcc main.c

a.out, -o , hello.exe


gcc main.c -o main.exe

2、gcc -c main.o


gcc -c main.c   #  main.o
​
gcc main.o    #    ,gcc          main.o          a.out

-o


gcc main.o -o main.exe

, , makefile makefile.^^