程式從原始碼到可執行檔案

2021-10-07 14:12:31 字數 1698 閱讀 2228

cmake和make

ide編輯器:是用於編寫源程式的軟體,通過編輯器來編寫源程式檔案。原始檔有特定的格式,由檔案的字尾名來區分,字尾取決於使用的程式語言,如c語言編寫的是c程式檔案,其原始檔以.c為字尾;c++語言編寫的程式原始檔則以.cpp為字尾。更多時候,編輯器是面向程式設計師的,程式編輯器和普通的文字編輯器的不同之處在於程式編輯器的設計上對程式設計師友好,能夠自動的幫助程式設計師實現一些功能,如:關鍵字的高亮顯示,關鍵字的自動填充等。

編譯器:編輯器所生成的是原始檔,原始檔是面向程式設計師人的,而非機器;對於電腦cpu而言,是無法識別原始檔的內容的,機器語言是二進位制的,即cpu只識別010101的二進位制檔案,因此需要一種程式能夠將供人識別的原始檔轉換為機器可以識別的二進位制檔案,這一轉換過程即是編譯,而執行這一過程的程式即是編譯器。通過編譯器編譯生成的是二進位制檔案,其字尾為.obj或.o等形式,此檔案可以被cpu讀取識別,但不能被完整執行。

鏈結器:在編寫程式的時候,通常會包含很多庫檔案以及很多函式宣告,子函式一類的東西,這些東西的本質都是在簡化編寫程式的複雜性,通常將經常使用的函式封裝成庫函式供程式呼叫,而將複雜的功能進行拆分,分檔案實現子模組,然後供主程式呼叫則有利於源程式的可讀性,但對於機器cpu而言,一般,對人友好的東西注定都對機器不友好,程式設計師可以在編輯器裡很容易的實現從函式使用到函式定義的跳轉,但機器在執行程式時可不會跳著檔案的執行,因此需要將程式中的函式呼叫和庫檔案中的呼叫的函式源程式對應起來,這一過程稱為鏈結,鏈結器就是做這一工作的。通過鏈結器鏈結生成的為可執行檔案,windows下,可執行檔案的字尾名為.exe。

懶惰是人類進步的源泉,程式的編譯過程亦是如此。最開始,乙個程式檔案裡只有乙個主程式,程式過長,不容易閱讀,因此出現了函式宣告和子函式。後來,發現有一些程式段在很多程式中都會用到,因此就想辦法將這一類經常用到的函式進行封裝,單獨作乙個檔案共享給所有人,這樣就可以供不同人使用,最後就有了庫檔案。再後來,由於需求的不斷增大,程式的**量不斷的增加,最後乙個人已經不能完成程式的編寫了,就開始將將程式功能進行拆分,乙個大的程式分為幾個不同的小功能模組,將這些小的功能模組進行組合就可以形成最後的總程式需求,將小模組分給不同的人來寫,在主程式中進行包含,這樣不僅能提高程式的可讀性,還能簡化程式的編寫難度。

同樣,對人友好的功能通常不會對機器友好。最初只有乙個原始檔,執行一次gcc或g++就可以完成了,隨著原始檔的增加,當改動了乙個庫檔案的源程式時,往往會發生連帶反映,需要重新便於很多源程式,如果逐個的進行編譯,無疑增加了很多操作,因此需要一種檔案能夠實現一次編寫,然後當要進行重新編譯時,只執行一次就可以將所有的源程式進行重新編譯。此時就出現了make功能,人們需要告知需要對哪些程式進行重新編譯,用什麼編譯器,當遇到庫函式時在那裡找,此時就誕生了makefile檔案,程式設計師在makefile裡編寫好這一系列的規則,提前進行規則限制,當需要重新編譯時就make一下,計算機根據makefile裡面的規定呼叫相應的編譯器,對相應的原始檔依次進行編譯。

但隨著原始檔的不斷增多,以及各種限制要求的增加,最終makefile檔案的編寫會越來越麻煩,就希望有一種程式能夠生成makefile檔案,這就算cmake,同樣需要告知cmake一些規則,如原始檔在哪兒等,這就是makelist.txt檔案。編寫makelist.txt要比makefile簡單的多。cmake根據mkaelist.txt生成makefile檔案,然後make根據makefile生成目標檔案。

整合開發環境(ide,integrated development environment )。這是集編輯、分析、編譯、除錯等多功能於一體的開發環境,進一步的簡化程式設計的複雜度。

C 從原始碼到可執行檔案

從乙個cpp檔案到乙個exe檔案,大概經歷了以下過程 預處理 preprocessor 根據預處理命令組裝成新的c c 程式,常以i為副檔名。這個過程包括 巨集的替換 刪除注釋 處理預處理指令 如 include ifdef 編譯 complier 將得到的i檔案翻譯成彙編 即.s檔案。彙編 ass...

從原始碼到可執行檔案的過程

1.預處理 預處理過程主要是處理那些原始檔和標頭檔案中以 開頭的命令,預處理的規則一般如下 1.對所有的巨集定義進行替換 2.處理所有條件編譯命令 3.處理 include命令,將被包含檔案的內容插入到該命令所在的位置 4.刪除所有的注釋 和 5.新增行號和檔名標識,便於在除錯和出錯時給出具體的 位...

從原始檔到可執行檔案

建立對於問題思考的能力,培養自己的程式設計思想。原始檔 目標檔案 可執行檔案 原始檔 用偏日常化的語言進行編寫。c cpp 目標檔案 由計算機可識別的二進位制 構成,決定了程式執行的基礎。obj o 可執行檔案 可以執行為程式的檔案。exe out 過程 編譯 編譯過程包括 預處理 標頭檔案 巨集定...