c如何編譯多文件
① 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)
② c語言怎麼進行多文件編譯,VC++6.0,要求詳細步驟
程序1 存入 a1.c
程序2 存入 a2.c
刪去 程序2 里 多寫 的 一行 void accumulate(int k)
========
MS VC++ 6.0 編譯命令:
CL a1.c a2.c
得到 a1.exe
運行 a1.exe 便可。
(其它編譯器, 請照貓畫虎。)
③ 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嗎
可以不在創建而直接使用嗎?
答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變數等統一定義到一個頭文件中,那這樣就可以避免多次定義了。
④ C++如何實現多文件程序的編譯和運行
vc++6.0實現多文件程序:
1、必須創建工程,並將文件加入同一工程下;2、必須有自定義頭文件(.h)將多個源文件(.c/.cpp)關聯起來,並將函數定義放在頭文件中。
多個源文件需要在這個窗口創建:
創建完畢後如圖:
⑤ C語言多文件編程
多個c文件的作用在於將不同功能的代碼分開來實現,這樣便於代碼重用、代碼編譯和代碼管理。
一個程序中,只能有一個main函數,這是整個程序的起點和入口。如果其他人也實現了該函數,則必須要重新命名,然後在唯一的main函數中統一調用。
多個c文件的合並並沒有順序要求,任何一個都可以先編譯或者後編譯。
extern表示導出,可以用於函數和變數。用於函數的時候,表示這是一個外部函數,用於變數的時候,表示這是一個外部變數。
如果使用一個c文件,多個h文件,則會導致改動代碼任何一個地方,都要重新編譯所有的文件,效率上非常不劃算。而使用多個c文件,當代碼發生變更的時候,僅僅相關的c文件代碼需要重新編譯,其他代碼則可以保持不變,不用參與編譯。
函數中的局部變數無法在函數外部調用,只能通過參數傳遞的方式傳遞給第三方函數。因為局部變數是出於棧上面的,棧會隨著函數調用完畢的時候被系統回收。
⑥ 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嗎
可以不在創建而直接使用嗎?
答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變數等統一定義到一個頭文件中,那這樣就可以避免多次定義了。
⑦ cmake編譯單/多文件
在該路徑下會生成一個文件夾(CMakeFiles),三個文件(Makefile, CMakeCache.txt, cmake_install.cmake)以及一個程序(addition)
此時的文件目錄結構為
該項目該依賴於MPI,GDAL和cereal庫。MPI和GDAL庫自行編譯
1.配置各種編譯的時候,可以使用set設置,更多詳情,請自行搜索。
2.頭文件的包含請使用include_directories。
3.搜索源文件請使用aux_source_directory。
4.第三方庫的查找使用 find_package。例如我們想找GDAL, 那麼 find_package(GDAL), 它會在 /usr/share/cmake/Moles 文件中的FindGDAL.cmake文件中去找GDAL的各種信息。前提是GDAL 是make install的, FindGDAL.cmake中才會有GDAL的各種信息。否則的話,我們需要set自行制定GDAL的相關信息。
5.第三方庫的鏈接用target_link_libraries。
注意,也可以將該項目中的某個文件夾編譯成靜態庫,然後在於其餘源文件鏈接,可以參考: https://blog.csdn.net/cliukai/article/details/90670243
簡單的多文件編譯: https://blog.csdn.net/cliukai/article/details/90670243
有第三方庫的文件編譯: https://blog.csdn.net/fb_help/article/details/79593037
⑧ linux下 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
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。
⑨ 如何把一個復雜的C語言源代碼分成幾個文件,然後在dev c++上進行多文件編譯
假設我們要更改的源代碼如下:

即「No such file or directory」就是沒有文件或者路徑。說明你的路徑寫錯了,在編程時務必要注意一下。
⑩ 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,就可以了。
