![](/img/trans.png)
[英]Have 'make' not output “redirecting incorrect #include” warnings during CC/GCC build?
[英]How are Make, Makefile, cc, and gcc connected in Linux? How to know what 'make' will do with a .c file? (Will 'make' call cc or gcc?)
我正在嘗試學習C,只是剛開始寫“很難學C”一書。 在第二課中,作者提到了Makefile,並指出當使用命令“ make example.c”時,“ make”將自動調用cc來構建.c文件。 出於好奇,我開始研究cc,因為我只熟悉gcc。 根據用戶Jonathan Leffler在SO的文章“ CC,gcc和g ++之間的區別? ”的說法,cc通常鏈接到Linux中的gcc。
所以這是我的問題:
1)cc如何在Linux中鏈接到gcc? 這似乎是一個簡單的問題,但我無法確定它是否需要基本答案或高級操作系統答案。 (似乎cc並不是一個環境變量,正如一個用戶在Red Hat Linux上使用“ env >> env_vars.txt”進行檢查然后讀取文本文件env_vars.txt的內容后在SO上聲稱的那樣。)
2)我們如何知道'make'遇到.c文件(或任何其他文件)時的內部細節? 例如,對於.c文件,我們如何確切地知道或確認'make'將調用cc,而不是直接通過.c文件調用gcc? (“ make”是否引用默認的Makefile?如果這樣,我們如何讀取該默認Makefile的內容?)
我不能為所有Linux回答問題,但希望這能給您足夠的答案來確定您自己系統的答案。
- CC如何鏈接到GCC
我們可以用
$ type cc
cc is /usr/bin/cc
那么/usr/bin/cc
什么?
$ ls -l /usr/bin/cc
lrwxrwxrwx 1 root root 20 Jun 29 2016 /usr/bin/cc -> /etc/alternatives/cc
因此,這是一個符號鏈接 -而是由alternatives
系統管理的鏈接 。 我們可以查詢:
$ update-alternatives --query cc
Name: cc
Link: /usr/bin/cc
Slaves:
cc.1.gz /usr/share/man/man1/cc.1.gz
Status: auto
Best: /usr/bin/gcc
Value: /usr/bin/gcc
Alternative: /usr/bin/clang
Priority: 10
Slaves:
Alternative: /usr/bin/gcc
Priority: 20
Slaves:
cc.1.gz /usr/share/man/man1/gcc.1.gz
因此cc
確實鏈接到/usr/bin/gcc
。
請注意, /usr/bin/gcc
本身可能是符號鏈接-到gcc
的特定版本:
$ ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 5 Feb 11 2016 /usr/bin/gcc -> gcc-5
- 我們如何知道'make'遇到.c文件時將執行的內部詳細信息
給定文件hello.c
我們可以使用-n
選項檢查make
可以執行的操作:
$ make -n hello
cc hello.c -o hello
除此之外,您還可以參考系統版本的make
的文檔-例如GNU make:規則目錄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.