當前位置:首頁 » 編程軟體 » 編譯器同時編譯多個文件

編譯器同時編譯多個文件

發布時間: 2022-05-30 20:12:42

A. c多個文件如何編譯

關於整個 C 語言中的主函數 main( ) 如何調用相關的頭文件(*.h)、以及調用其它獨立的模塊(*.c)的方法,關鍵在於對於如何編寫 makefile 文件的真正理解、以及真正掌握編寫規則。
由於我已經有很多年沒有編寫過 C 語言源程序、以及編寫 makefile 文件了,但是可以大概給你提供一個思路就是:

下面的文本文件假設以 my_makefile 為例,編譯環境為 Linux 系統,C 語言編譯器為 gcc。
但是在這里注意一點:我的 my_makefile 文件中的注釋語句是否是分號進行注釋,我已經不太記得了,這個需要自己再參考一下。

另外就是:對源文件(*.c)、以及生成可執行文件(my_runfile)在 my_makefile 文件中的前後次序,我也記不清了,僅供參考。
myprog1.o: myprog1.c ; myprog1.o 的生成依賴於 myprog1.c 這個源程序
gcc -c myprog1.c ; 使用 Linux 系統的 C 語言編譯器對 myprog1.c 只編譯、不鏈接
myprog2.o: myprog2.c ; myprog2.o 的生成依賴於 myprog2.c 這個源程序
gcc -c myprog2.c ;使用 Linux 系統的 C 語言編譯器對 myprog2.c 只編譯、不鏈接
my_runfile: myprog1.o myprog2.o ; 可執行文件 my_runfile 的生成依賴於 myprog1.o、myprog2.o 這兩個目標文件
gcc -o my_runfile myprog1.o myprog2.o ; 使用 cc 的 -o 選項生成用戶自定義的可執行文件:my_runfile,如果不指定 -o 選項,cc 編譯器生成的預設可執行文件名為:a.out
運行命令為:
$make -f my_makefile (使用 -f 選項代替預設的 make 文件名 makefile)

B. 怎麼編譯多個c語言文件

1、如果,在一個c主程序中,以include形式包含了其他所有的引用文件,在編譯過程中,編譯器首先會將這些文件合並到一個臨時文件中,然後再對這個臨時文件進行編譯。
2、如果,是作為一個工程,編譯器會分別編譯各個獨立的文件(如果文件中有include按照上一步進行),然後再將編譯好的初步結果用鏈接程序連到一起。
簡單的說,每一個.c或者.cc都是一個編譯單元,每一個編譯單元編輯的結果是一個.o或者obj之類的中間文件,至於是否是多文件,不需要關心,但是要保證不同的編譯單元之間不要有重復的符號,這就是要避免重復包含。
每一個編譯單元生成的目標文件.o或者obj都會引用一些不在本目標文件中的符號,這些符號定義在別的.o或者.obj文件中, 鏈接器把他們聯系在一起,所有的符號也就都有定義了,編譯鏈接簡單說來就是這樣。

C. 多個文件的條件編譯,需要注意些什麼

不能在同一個文件中包含頭文件兩次。一般不會犯這種錯誤,但是當使用包含了一個頭文件的文件時有可能在不知情的情況下犯這個錯誤。

使用預處理器指令#ifndef來解決上面的問題。語名#ifndef hyong…..#endi表示僅當以前沒有使用預處理器編譯指令#define定義的名稱hyong時才處理#ifndef….#endif之間的語句。#define通常創建符號常量,比如#define H 3;把常量3定義為名字H,但只使用#define就能創建名稱,比如#define H;就創建了一個名稱H。完整的#ifndef….#endif語句的例子如下:#ifndef HY #define HY void g(); #endif;該語句的執行順序為:編譯器首先遇到該頭文件時,名稱HY沒有被定義,這時編譯器就將查看#ifndef….#endif之間的內容,並讀取到#define HY這一行。如果在同一文件中遇到包含該頭文件的代碼時,編譯器就知道HY這個名字已經被#define定義了,從而跳過#ifndef….#endif之間的內容。注意這種方法並不能防止頭文件被包含兩次,而只是讓他忽略除第一次包含之外的所有內容。

上面的內容節選自本人文庫里的文章《C++名稱空間與作用域專題》,希望對你有幫助,如果你對預處理器不了解,可以再去下載本人的另一篇文章《C++宏,預處理器,RTTI,typeid與強制類型轉換專題》

D. 關於gcc編譯器,在控制台寫*.cpp編譯多個cpp會報錯

根據報錯信息,是因為「g++ -c *.cpp」這條指令的通配符串「*.cpp」沒有展開所致。

根據驗證,當執行「g++ -c *.cpp」這條指令時,當前目錄比如testcomb下沒有後綴名為cpp的文件,「*.cpp」就不會展開,就會報錯。

---

如上圖所示,當前目錄下沒有.c文件,報錯與問題中的一致。

E. vscode C語言如何編譯多個源文件

你可以寫一個類似的任務在task里:在args一行,寫你需要編譯的文件
{
"label": "build my project",
"type": "shell",
"command": "C:\\MinGW\\bin\\g++.exe",
"args": ["main.cpp", "test.cpp", "-o", "test.exe"],
"group": "build",
},
你還可以寫一個make任務,對於文件多的,手寫不現實,可以做一個makefile
這樣你只要在launch裡面
preLaunchTask,寫上這個build my project,就可以了。

F. c語言編寫和編譯多文件的程序

第一個問題
請問,我是不是該這樣做:
在main.c中#include
在fun.c中同樣#include
(好像是必需的,請詳細解釋)
這是必需的。因為編譯器只是把包含文件的代碼復制過來,既然你二個文件中都用到頭文件的內容,那當然要包含頭文件,否則就會出錯。
我的觀點,如果這兩步都是必需的
那麼當有很多個比如10個.c程序每個里頭都要#include
那麼文件是不是會特別大,當有100個.c程序都要包含一下的話,那麼不是非常重復么?)
那當然是會重復的。不過這個對程序的運行效率沒任何影響,只是在編譯過程中對文件的分析時間會稍長些,這也是沒有辦法的事,全看代碼編寫者如何組織結構了。
第二個問題:
會的。解決的方法就是在可能被多次包含的頭文件中開頭加上#pragma
once,那樣就可以保證此頭文件代碼只被執行一次,而不會造成頭文件中函數多次重復定義至於引起這種情況的情況。當然你也可以自己用#ifdef等預編譯處理來解決。你問的問題不就是這種情況么?main.c和fun.c中都包含頭文件tou.h
第三個問題:
當我在main.c中這樣
#define
unchar
unsigned
char
那麼當我在fun.c中還需要重新創建替換宏unchar嗎
可以不在創建而直接使用嗎?
答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變數等統一定義到一個頭文件中,那這樣就可以避免多次定義了。

G. C 語言中多文件編譯的問題

如果有多個源文件,基本上有兩種編譯方法:
[假設有兩個源文件為test.c和testfun.c]
1.
多個文件一起編譯
用法:#gcc
testfun.c
test.c
-o
test
作用:將testfun.c和test.c分別編譯後鏈接成test可執行文件。
2.
分別編譯各個源文件,之後對編譯後輸出的目標文件鏈接。
用法:
#gcc
-c
testfun.c
//將testfun.c編譯成testfun.o
#gcc
-c
test.c
//將test.c編譯成test.o
#gcc
-o
testfun.o
test.o
-o
test
//將testfun.o和test.o鏈接成test
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。

H. C語言多個源文件一起編譯

你這個是一個工程里的兩個.c文件,如果這兩個.c文件都有入口那麼肯定是不正確的,編譯器會不知道哪個才是你程序的真正入口,如果你去掉一個入口,利用頭文件包含來調用函數,兩個.c也是一樣可以的

I. c語言中多個文件的編譯問題

第一個問題
請問,我是不是該這樣做:
在main.c中#include
在fun.c中同樣#include
(好像是必需的,請詳細解釋)
這是必需的。因為編譯器只是把包含文件的代碼復制過來,既然你二個文件中都用到頭文件的內容,那當然要包含頭文件,否則就會出錯。
我的觀點,如果這兩步都是必需的
那麼當有很多個比如10個.c程序每個里頭都要#include
那麼文件是不是會特別大,當有100個.c程序都要包含一下的話,那麼不是非常重復么?)
那當然是會重復的。不過這個對程序的運行效率沒任何影響,只是在編譯過程中對文件的分析時間會稍長些,這也是沒有辦法的事,全看代碼編寫者如何組織結構了。
第二個問題:
會的。解決的方法就是在可能被多次包含的頭文件中開頭加上#pragma
once,那樣就可以保證此頭文件代碼只被執行一次,而不會造成頭文件中函數多次重復定義至於引起這種情況的情況。當然你也可以自己用#ifdef等預編譯處理來解決。你問的問題不就是這種情況么?main.c和fun.c中都包含頭文件tou.h
第三個問題:
當我在main.c中這樣
#define
unchar
unsigned
char
那麼當我在fun.c中還需要重新創建替換宏unchar嗎
可以不在創建而直接使用嗎?
答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變數等統一定義到一個頭文件中,那這樣就可以避免多次定義了。

J. 關於java中一次編譯多個源文件時的編譯順序的問題

在java編譯過程中,確實是會自動尋找的.當它先編譯Test的時候,發現需要先編譯TestPackage類,才能完成編譯Test的工作,然後編譯器開始編譯TestPackage.
如果,你的這兩個java文件都沒有打包,並且在同一個目錄下的話,你可以通過直接輸入javac Test.java看到,盡管你沒有發出命令要求編譯TestPackage類,但是由於編譯器檢測到需要有TestPackage類的支持,才能編譯Test,所以這時TestPackage也被編譯了.
現在程序打包了,你先編譯Test的這種情況下,編譯器先找的是包,而你的包org.it315.example是不存在的,所以會出錯

熱點內容
c目錄文件夾 發布:2024-05-22 05:36:45 瀏覽:107
編程貓微課 發布:2024-05-22 05:36:37 瀏覽:655
兒童編程的書 發布:2024-05-22 05:35:49 瀏覽:580
加密技術挑戰 發布:2024-05-22 05:09:01 瀏覽:985
懷舊服玩小號去什麼伺服器 發布:2024-05-22 04:52:22 瀏覽:559
網頁無法上傳照片 發布:2024-05-22 04:34:04 瀏覽:194
奇特解壓圖解大全 發布:2024-05-22 04:04:38 瀏覽:649
學php8 發布:2024-05-22 03:56:56 瀏覽:740
紫米的充電寶wifi密碼是多少 發布:2024-05-22 03:25:12 瀏覽:71
車內搞笑配置有哪些 發布:2024-05-22 03:16:03 瀏覽:892