1. 程式人生 > >Linux下多檔案的編譯

Linux下多檔案的編譯

先看一個簡單的多檔案
test.h

#include <stdio.h>

add.c

#include"tast.h"
int add(int a,int b)
{
    return a+b;
}

main.c

#inlcude "tast.h"
int main()
{
    int a = 3;
    int b = 4;
    printf("sum = %d", add(a,b));
    return 0;
}

編譯:

gcc -c add.c -o add.o
gcc -c main.c -o main.o
gcc add.o main.o
-o all

執行:

./all

如果我們有很多個.c檔案,這個方法就不太好了,這時,我們提出Makefile檔案。

Makefile:自動編譯。先將每個.c檔案的編譯過程提前寫在Makefile檔案中,在執行程式時,系統直接用make命令使檔案自動編譯,提高效率。

Makefile檔案的書寫格式:

Linux 下:

vim   Makefile

Makefile檔案中:

main:main.o                    //可執行檔案main是由目標檔案main.o得到。

gcc  main.o  –o  main         //得到過程是將main.o
編譯成main檔案。 main.o:main.c gcc -c main.c -o main.o

在Makefile檔案中一定要將每一個.c檔案按執行順序先編譯成.o檔案,再按順序將.o檔案編譯成可執行檔案。

每次編譯過後會產生很多的.o檔案,對於程式執行沒什麼太大意義,反而會佔記憶體,所以我們也可以在Makefile檔案中新增清除命令(clean),如:

 .PHONY:clean

 clean:                //刪除所有檔案型別為.o的檔案

 rm  –rf   *.o

一些檔案也可用下面符號表示:

[email protected]: 代表規則裡面的目標檔案。

$<:代表規則當中的第一個依賴檔案。

%.c:%.o   所有.c檔案全部編譯成.o檔案

.PHONY:clean

如果有.PHONY:clean,外面也有clean檔案,執行make clean時,裡面的.o檔案會被刪除而外面的clean檔案還在。確保了外面clean檔案的安全性。如果沒有.PHONY:clean 語句,外面也沒有clean檔案時,在執行make clean也會刪除.o檔案,如果外面有clean,則會報錯。

PHONY:目標並非實際的檔名,只是顯示在請求時執行命令的名字。有兩種理由需要使用PHONY目標:避免和檔名衝突,改善效能。

Makefile:

all: main.o add.o
    gcc main.o add.o -o all
main.o:main.c
    gcc -c main.c -o main.o
add.o:add.c
    gcc -c add.c -o add.o
.PHONY:clean
clean:
    rm -rf *.o

Linux下編譯和執行(make:編譯, ./all:執行)::

make

./all

make clean

相關推薦

Linux檔案編譯

先看一個簡單的多檔案 test.h #include <stdio.h> add.c #include"tast.h" int add(int a,int b) { return a+b; } main.c #inlc

Linux檔案中查詢內容中含某關鍵字檔案的方法

假如,你想在當前目錄下的所有普通檔案中搜索查詢包含:liehuo.net 這個詞的檔案,那麼命令如下: 1、# find . -name \* -type f -print | xargs grep “liehuo.net”2、#find -name 'EAI*.log'

Linux C 檔案編譯

多檔案編譯 將工程目錄下的每個原始檔都編譯(通過編譯器)成對應的目標檔案(Linux平臺下為.o檔案,是二進位制的,但無法執行) ,然後將所有的目標檔案和庫檔案連結在一起(通過連結器)構成最終的可執行

Linux檔案的C++工程編寫、編譯要點

編譯流程: 假定有三個檔案:main.cpp: #include <iostream> #include "include/func1.hpp" int main(){ cout<<"this is main"<<endl; fu

live555在arm linux的交叉編譯,並下載的Arm板播放H264檔案

我的系統是ubuntu 11.10 1.live555原始碼 和 H264測試檔案下載 ,見如下連結 2.根據自己的交叉編譯器修改config.*(具體見下載檔案中的config.armeb-uclibc), 我的編譯器是buildroot-gcc342-----mi

linux用gcc編譯c程式時遇到的問題: error: stdio.h: 沒有那個檔案或目錄

原因是沒有安裝libc6-dev的軟體包。命令列下輸入apt-get install build-essential即可。這個build-essential是幹什麼的呢?原來build-essential是一個列表,包含了編譯debian包必需的大部分元件。安裝完之後,順利解

linux檔案編譯—makefile

說到linux下多檔案編譯。大多是c語言,因為linux核心以及許多的自由軟體都是c語言編寫的。當然還有c++語言,區別就是c語言使用gcc,而c++語言使用g++。那麼本文以c語言為例講解。c++

linuxC/C++編譯時系統搜尋 include 和 連結庫 檔案路徑的指定

    第二種搜尋路徑的設定方式對於程式連線時的庫(包括共享庫和靜態庫) 的定位已經足夠了,但是對於使用了共享庫的程式的執行還是不夠的。這是因為為了加快程式執行時對共享庫的定位速度,避免使用搜索路徑查詢共享庫的低效率,系統會直接讀取 /etc/ld.so.cache 並從中進行搜尋的。/etc/ld.so.

Linux個程序或執行緒同時對一個檔案進行寫操作

標頭檔案 #include<sys/file.h> 定義函式 int flock(int fd,int operation); 函式說明 flock()會依引數operation所指定的方式對引數fd所指的檔案做各種鎖定或解除鎖定的動作。此函式只能鎖定整個檔案,無法鎖定檔案的某一區域。 引數ope

linux程序的檔案拷貝與程序相關的一些基礎知識

之前實現了用檔案IO的方式可以實現檔案的拷貝,那麼對於程序而言,我們是否也可以實現呢? 答案是肯定的。 程序資源: 首先我們先回顧一下,程序的執行需要哪些資源呢?其資源包括CPU資源,記憶體資源,當然還有時間片資源,我們都知道程序是有 棧, 堆,  只讀資料段,  資料段(

Linux執行緒檔案傳輸

要求:服務端客戶端分辨各佔一個程序,客戶端中可設定TCP連線數n,之後將檔案等分成n塊同時傳輸。 思路: 在網上查到了許多關於Linux下socket檔案傳輸的文章,受益許多,其中有個部落格寫的很好 連結:http://blog.csdn.net/zhqia

linux用eclipse編譯c++的pthread執行緒配置

問題:eclipse使用pthread.h遇到“pthread_create”未定義的問題。 解決方法: a.需要在編譯時新增-lpthread引數 $ g++ XXXXX.cpp -lp

檔案編譯的makefile編寫(附當前目錄所有.c/.cpp檔案編譯makefile)

C程式碼是如何變成可以執行程式的過程:     1、由前處理器把程式設計師所編寫的C程式碼翻譯成標準C程式碼,可以得到以.i結尾的預處理檔案。         gcc -E code.c         gcc -E code.c -o code.i      2、由彙編器

linux使用g++編譯包含個庫的c++的方法

c++由於其簡潔,高效,跨平臺,使用非常廣。下面講一下怎麼在linux下編譯有多個依賴項的c++檔案。這是一個在mac上的xcode編譯通過的一個c++的工程。 這個工程依賴了多個opencv,labsvm和json的庫,要把這個工程部署到linux伺服器上,需要進行以下

Linux php 版本共存安裝

git span can tar yum sta acc pen hang 我們知道apache + php 是比較經典的搭配,但是兩者都會升版,咱家就經歷過兩次php 升版。 一般就是重新下載新版本的php ,然後編譯安裝。這一切都很繁瑣。有沒有自動安裝工具

linux網卡綁定

linux負載均衡interface服務器iodelay假定將eth0,eth1,eth2,eth3綁定成bond0,步驟如下:(1) #vi /etc/modprobe.conf, 添加如下2行: alias bond0 bonding

linux使用gcc編譯運行C程序

images 鏈接 cnblogs bin collect 運行 ffffff alt 兩種 gcc(GNU Compiler Collection)是Linux下最常用的C語言編譯器,是GNU項目中符合ANSI C標準的編譯系統,能夠編譯用C、C++和Object C等語

linux 線程寫文件

stat blog 利用 sys 文件描述 clu 16px urn for linux 下多線程給文件加排他鎖 利用flock 函數,具體用戶請自己查。 執行流程 1,創建 /dev/shm/test文件,並打開文件。 2,fork 一個子進程 在子進

【驚雷】Linux網卡冗余的實現

如果 bond1 轉移 執行 art 分配 exec 系統 硬件 Linux下多網卡冗余的實現 一、簡介 所謂多網卡冗余就是通過工具把多張網卡綁定成一個IP地址(bond0屬於虛擬網卡)使用。這項技術在大中小企業都無比受用。如下圖: 多網卡的綁定的優點: 1、擴大服務器的

Linux節點SSH無密碼互聯實現

openssh color pre 都是 測試 創建 私鑰 無密碼ssh 需要 需求:有3個主機192.168.0.191、192.168.0.192、192.168.0.193,需要實現無密碼ssh互聯訪問 我使用的是root用戶進行操作的: 1、每個節點分別檢查是否安裝