1. 程式人生 > >Linux下使用make命令編譯c原始檔

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語言再學習 -- Linuxfind命令用法

linux下查詢檔案的命令有兩個:locate 和 find 首先說一下locate: 這個命名是對其生成的資料庫進行遍歷(生成資料庫的命令:uodatedb),這一特性決定了用locate查詢檔案速度很快,但是locate命令只能對檔案進行模糊匹配,在精度上來說差了點,

linuxcp命令---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>

LinuxMake編譯結果輸出到檔案

    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下一個強大的文本文件處理工具,通過對文件增加、刪除、查找、查詢操作,配合正則表達式以實現工作中的各種需求。同時也是一名運維人員必須掌握的核心技能。---------------------------

linuxcat命令詳解

forever ron localhost root sta testing 幫助 查看 一點 1、cat 顯示文件連接文件內容的工具; cat 是一個文本文件查看和連接工具。查看一個文件的內容,用cat比較簡單,就是cat 後面直接接文件名。 比如: de>[[

linuxalias命令具體解釋

margin san 登錄 white gre con 變量 每次 ext linux下alias命令具體解釋 用途說明 設置命令的別名。在linux系統中假設命令太長又不符合用戶的習慣,那麽我們能夠為它指定一個別名。盡管能夠為命令建立“鏈接” 解決長文件名

linuxyum命令出現Loaded plugins: fastestmirror

tle enable yum test enabled net post sdn http linux下yum命令出現Loaded plugins: fastestmirror yum install的時候提示:Loaded plugins: fastestmirror

linuxwget命令,支持斷點續傳,ftp、http、https等協議

strong 工作 等待 命名 wget命令 source cmd itl 操作 轉載的地址:http:[email protected]/* *//blog/static/32097310201171833420905/ 今天操作遠端機器的時候發現少一個安裝

LinuxDiff命令

普通 命令 圖形化 標準輸入 們的 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