gccコンパイルオプション-oと-cの紹介

2698 ワード

オプション-o
1点目
オプション-oは、生成する結果ファイルを指定します.後に結果ファイルの名前が付いています.
oはアウトプットの意味で、目標の意味ではありません.
結果ファイルは、前処理ファイル、アセンブリファイル、ターゲットファイル、または最終実行可能ファイルである可能性があります.
2例
gcc -S test.i -o test.s
# -S           
#       test.s

3例
gcc -c test.cpp -o test
#   gest     ,       ,       -c,  gcc     ,      。
gcc -c test.cpp -o test.o
#   test.o test  ,      

4例
gcc test.c -o test
#        test

二オプション-c
1点目
オプション-cはgccにソースファイルをコンパイルするとアセンブリされますが、リンクされません.このとき、ターゲットファイルが生成する、出力ファイルが指定されていなければ同名のファイルが生成される.oファイル.
2例
[root@localhost temp]# gcc -c test.cpp
[root@localhost temp]# ll
total 8
-rw-r--r--. 1 root root  188 Mar 10 11:00 test.cpp
-rw-r--r--. 1 root root 1504 Mar 10 11:00 test.o
#        test.o

3例
[root@localhost temp]# gcc -c test.cpp -o test
# test     ,        ,       ,  test.o    
[root@localhost temp]# ls
test  test.cpp  test.o
[root@localhost temp]# ./test
-bash: ./test: Permission denied
[root@localhost temp]# chmod +x test
[root@localhost temp]# ./test
-bash: ./test: cannot execute binary file
[root@localhost temp]# md5sum test.o
3edeaa07cd496b92e1fd5c287de2131b  test.o
[root@localhost temp]# md5sum test
3edeaa07cd496b92e1fd5c287de2131b  test

4-c後およびマルチソースファイルの場合
-cの後に複数のソースファイルが続くと、ソースファイルごとに1つが生成される.oファイルですが、この場合-oは使用できません.
5実戦
test1.cppコンテンツ
[root@localhost temp]# cat test1.cpp
#include 
int t1()
{
    bool b=false;  //       test.c    ,  C    bool  
    printf("hello, boy 
" ); return 0; }

test2.cppコンテンツ
[root@localhost temp]# cat test2.cpp
#include 
int t2()
{
    bool b=false;  //       test.c    ,  C    bool  
    printf("hello, boy 
" ); return 0; }

-cコンパイルとアセンブリを行う
[root@localhost temp]# ll
total 12
-rw-r--r--. 1 root root 186 Mar 10 11:05 test1.cpp
-rw-r--r--. 1 root root 186 Mar 10 11:06 test2.cpp
-rw-r--r--. 1 root root 188 Mar 10 11:00 test.cpp
[root@localhost temp]# gcc -c test.cpp test1.cpp test2.cpp
[root@localhost temp]# ls
test1.cpp  test1.o  test2.cpp  test2.o  test.cpp  test.o
#     ,     3 .o  
# -c    -o,   
[root@localhost temp]# gcc -c test.cpp test1.cpp test2.cpp -o test.o
gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
#            (  -c),        ,-o     。
[root@localhost temp]# gcc test.cpp test1.cpp test2.cpp -o test
[root@localhost temp]# ls
test  test1.cpp  test1.o  test2.cpp  test2.o  test.cpp  test.o
[root@localhost temp]# ./test
hello, boy