Linux下使用make命令編譯c原始檔
make命令是GNU的工程化編譯工具,用於編譯眾多相互關聯的原始碼問價,以實現工程化的管理,提高開發效率。
make命令唯一讀取的檔案是Makefile,在較大的專案中,有些檔案沒有編譯有些編譯過,Makefile中指定一定的規則來對整個專案的所有檔案新型編譯,make命令讀取檔案,按照規則編譯未編譯的檔案。
因此使用make命令可以避免使用gcc命令進行繁瑣的執行編譯。
以三個檔案為例:
max.c:
int max(int a,int b)
{
if(a > b){
return a;
}else{
return b;
}
}
min.c:
int min(int a,int b) { if(a < b){ return a; }else{ return b; } }
res.h:
int max(int a,int b);
int min(int a,int b);
res.c:
#include <stdio.h>
#include "cal.h"
int main()
{
int a = 99;
int b = 88;
int maxVal = max(a,b);
int minVal = min(a,b);
printf("the max value is %d\nthe min value is %d\n",maxVal,minVal);
return 0;
}
在res.c中引用了兩個max和min,分別計算兩個整型的最大和最小值
如果不使用make命令,列印res.c的最終結果需要執行步驟:
先分別編譯max.c和min.c為max.o和min.o檔案;
再編譯res.c生成可執行檔案,然後執行可執行檔案即可得到結果。
使用make命令編譯過程:
1.建立並編輯Makefile檔案
規則格式為:
<生成可執行二進位制檔名>:<引入的.o檔案1> <引入的.o檔案2> <c原始檔>
<gcc執行命令>
# this is a make file res.out:max.o min.o gcc max.o min.o res.c max.o:max.c gcc -c max.c min.o:min.c gcc -c min.c
執行命令如下:
[email protected]:/home/wwwroot/test/c$ vim Makefile
[email protected]:/home/wwwroot/test/c$ ls
cal.h Makefile max.c min.c res.c
[email protected]:/home/wwwroot/test/c$ make
gcc -c max.c
gcc -c min.c
gcc max.o min.o res.c -o res.out
[email protected]:/home/wwwroot/test/c$ ls
cal.h Makefile max.c max.o min.c min.o res.c res.out
[email protected]:/home/wwwroot/test/c$ ./res.out
the max value is 99
the min value is 88
[email protected]:/home/wwwroot/test/c$
最終make工具會根據Makefile的規則執行所有的編譯,並根據引用對未編譯的引用檔案進行編譯。
注:Linux若沒有自帶make工具,則需要進行安裝,使用make -v可以檢視版本
apt-get install make
make -v
相關推薦
Linux下使用make命令編譯c原始檔
make命令是GNU的工程化編譯工具,用於編譯眾多相互關聯的原始碼問價,以實現工程化的管理,提高開發效率。make命令唯一讀取的檔案是Makefile,在較大的專案中,有些檔案沒有編譯有些編譯過,Makefile中指定一定的規則來對整個專案的所有檔案新型編譯,make命令讀取
例解 Linux 下 Make 命令
Linux 下 make 命令是系統管理員和程式設計師用的最頻繁的命令之一。管理員用它通過命令列來編譯和安裝很多開源的工具,程式設計師用它來管理他們大型複雜的專案編譯問題。本文我們將用一些例項來討論 make 命令背後的工作機制。 Make 如何工作的 對於不知道背後機理的人來說,make 命令像命令
linux下用gcc編譯c程式時遇到的問題: error: stdio.h: 沒有那個檔案或目錄
原因是沒有安裝libc6-dev的軟體包。命令列下輸入apt-get install build-essential即可。這個build-essential是幹什麼的呢?原來build-essential是一個列表,包含了編譯debian包必需的大部分元件。安裝完之後,順利解
linux下用eclipse編譯c++的pthread多執行緒配置
問題:eclipse使用pthread.h遇到“pthread_create”未定義的問題。 解決方法: a.需要在編譯時新增-lpthread引數 $ g++ XXXXX.cpp -lp
linux下使用gcc編譯運行C程序
images 鏈接 cnblogs bin collect 運行 ffffff alt 兩種 gcc(GNU Compiler Collection)是Linux下最常用的C語言編譯器,是GNU項目中符合ANSI C標準的編譯系統,能夠編譯用C、C++和Object C等語
linux下編輯並編譯執行C/C++/python程式
1,C和C++程式 http://www.2cto.com/kf/201207/140035.html http://blog.chinaunix.net/uid-20620288-id-3217203.html 其中,如果hello.c 程式中含有數學函式,用gcc編譯
Linux下編輯、編譯、除錯命令總結——gcc和gdb描述
GCC gcc是linux系統整合的編譯器。在linux環境下編輯程式,首先需要克服的便是沒有整合開發環境的一鍵式操作所帶來的麻煩。這其中涉及命令列操作、編譯選項的設定、檔案依賴關係的書寫(makefile)等問題。這裡主要介紹的是關於gcc的常用命令列引
C語言再學習 -- Linux下find命令用法
linux下查詢檔案的命令有兩個:locate 和 find 首先說一下locate: 這個命名是對其生成的資料庫進行遍歷(生成資料庫的命令:uodatedb),這一特性決定了用locate查詢檔案速度很快,但是locate命令只能對檔案進行模糊匹配,在精度上來說差了點,
linux下cp命令---C程式碼實現
#include <sys/cdefs.h> #ifndef lint __COPYRIGHT( "@(#) Copyright (c) 1988, 1993, 1994\ The Regents of the University of Californi
linux下使用命令模式去編譯Qt程式
一、新建Qt程式 在linux下的目錄新建一個Qt的cpp檔案,如下 vim hello.cpp #include <QApplication> #include <QLabel> #include <QtDebug>
Linux下Make編譯結果輸出到檔案
Linux系統下執行make命令,編譯比較大一點的工程或者檔案的時候,在命令列下錯誤和警告資訊直接就把我們的實現覆蓋了。 把編譯日誌輸出到檔案是個選擇,執行如下命令即可達到目的。 make > build.log 2>&1
linux下使用g++編譯包含多個庫的c++的方法
c++由於其簡潔,高效,跨平臺,使用非常廣。下面講一下怎麼在linux下編譯有多個依賴項的c++檔案。這是一個在mac上的xcode編譯通過的一個c++的工程。 這個工程依賴了多個opencv,labsvm和json的庫,要把這個工程部署到linux伺服器上,需要進行以下
在linux下用命令列編譯 java的eclipse專案
由於jdk的版本問題導致在windows上編譯打包好的jar包放在linux伺服器上執行的時候出現一點小異常,所以決定在linux上進行一次專案編譯,這有兩個選擇 1.在相同的linux環境下安裝linux版的eclipse 進行編譯 2.在linux用javac命令列進行編譯 3.用maven,ant等專案
Linux下常用命令之sed學習總結
linux sed sed命令 正則表達式 sed總結 Sed功能說明:Sed是linux下一個強大的文本文件處理工具,通過對文件增加、刪除、查找、查詢操作,配合正則表達式以實現工作中的各種需求。同時也是一名運維人員必須掌握的核心技能。---------------------------
linux下cat命令詳解
forever ron localhost root sta testing 幫助 查看 一點 1、cat 顯示文件連接文件內容的工具; cat 是一個文本文件查看和連接工具。查看一個文件的內容,用cat比較簡單,就是cat 後面直接接文件名。 比如: de>[[
linux下alias命令具體解釋
margin san 登錄 white gre con 變量 每次 ext linux下alias命令具體解釋 用途說明 設置命令的別名。在linux系統中假設命令太長又不符合用戶的習慣,那麽我們能夠為它指定一個別名。盡管能夠為命令建立“鏈接” 解決長文件名
linux下yum命令出現Loaded plugins: fastestmirror
tle enable yum test enabled net post sdn http linux下yum命令出現Loaded plugins: fastestmirror yum install的時候提示:Loaded plugins: fastestmirror
linux下wget命令,支持斷點續傳,ftp、http、https等協議
strong 工作 等待 命名 wget命令 source cmd itl 操作 轉載的地址:http:[email protected]/* *//blog/static/32097310201171833420905/ 今天操作遠端機器的時候發現少一個安裝
Linux下Diff命令
普通 命令 圖形化 標準輸入 們的 sina 工具 文件 內容 一般正常比較兩個文件用vimdiff,算是直接進入vim界面,如果比較兩個文件夾下面的文件,可以用diff,註意,這裏只會比較文件夾下面的同名文件,他會列出不一樣的點. 參考Linux下Diff命令使用方法 d
Linux下經常使用的C/C++開源Socket庫
bsd 面向對象 sql數據庫 高速 com telnet ade ftp 版本 1. Linux Socket Programming In C++ : http://tldp.org/LDP/LG/issue74/tougher.html2. A