1. 程式人生 > >多個原始檔編譯--makefile

多個原始檔編譯--makefile

main.c 中引入one.h 和two.h兩個標頭檔案,one.c two.c 分別實現兩個標頭檔案中定義的函式

有兩種方式編譯執行該程式,

一:手動單獨編譯

gcc -c one.c

gcc -c two.c

gcc -c main.c

gcc -o main main.o one.o two.o

二、makefile

#! /bin/sh

main:main.o one.o two.o

      gcc  -o main main.o one.o two.o

main.o:main.c one.h two.h

      gcc -c main.c


one.o:one.c one.h

      gcc -c one.c

還可以對makefile進行精簡:

首先有三個符號:

1 [email protected] 代表目標檔案

2 $< 代表第一個檔案

3$^ 代表所有依賴檔案

所以上面命令可以精簡為:

main:main.o one.o two.o

    gcc(或者cc) -o [email protected] $^


main.o:main.c one.h two.h

     gcc(或者cc)-c $<


one.o:one.c one.h

tab鍵gcc(或者cc)-c $<

相關推薦

原始檔編譯--makefile

main.c 中引入one.h 和two.h兩個標頭檔案,one.c two.c 分別實現兩個標頭檔案中定義的函式 有兩種方式編譯執行該程式, 一:手動單獨編譯 gcc -c one.c g

原始檔編譯成一個模組注意Makefile 書寫

多個原始檔編譯成一個模組,不正確的Makefile 會使printk 不能輸出資訊。 細細觀測,發現是對Makefile 語法未深刻理解所致。 下面附上一例說明問題。 -----------------------------------------------------

原始檔進行編譯,即 makefile 的編寫

makefile的好處是防止原始檔的重複編譯 比如有好多個原始檔,某天對其中一個原始檔進行修改,如果不寫makefile的話,需要將整個工程的所有檔案重新編譯一遍,非常麻煩,有了makefile,說明了每個原始檔的依附關係,當某個原始檔改變的時候只需重新編譯一下關聯的原始

linux 核心模組程式設計之編譯原始檔(三)

編譯擁有多個原始檔的核心模組的方式和編譯一個原始檔的方式差不多,我們先來看下我們需要的檔案都有哪些。 首先是main.c檔案 #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE

Codeblocks編譯原始檔

當我們同時編譯多個檔案時,一個是a.c,另一個是main.c。下面是a.c的內容#include<stdio.h> char a = 'A'; void msg() { printf("Hello\n"); }下面是main.c的內容#include

在Linux 下編譯連結原始檔

add.c 的內容 int Add(int a,int b) {   int result;   result=a+b;   return  result;} minus.c 的內容 int Minus(int a,int b){  int result;  result

【菜雞筆記001】 在工程中執行原始檔

首先建一個空工程; 選擇選項卡中工程選項(啊嘞,這個畫的好像有點醜); 新建一個頭檔案; 使用“#include “stdio.h””格式,不能用<stdio.h>哦,如果下面有函式的話,在這裡需要函式宣告,宣告方式和在單個檔案寫程式中的宣告相同;

關於linux核心模組程式設計時,原始碼檔案Makefile書寫的問題

在學習核心模組程式設計的時候遇到了一些由於Makefile書寫不正確導致的問題。一個.c原始檔的Makefile按照網上的大部分資料介紹那樣是沒有問題的,多個原始檔的核心模組程式設計時,就出現問題了,自己糾結了半天,最後查資料、請教大神才搞定的。把過程和解決方法貼出來,供

linux環境下檔案編譯

1.在編寫C程式時,使用UTF-8格式。 od -tc test.c winhex,可以開啟檔案儲存方式。 2.編寫H檔案時,需要有#endif error: unterminated #ifndef:https://blog.csdn.net/lele2426/article/deta

Maven專案配置原始檔

需求Maven 為我們提供了一致的專案目錄配置(原始檔夾、資原始檔夾等),在自動構建專案時, Maven 會按照這個配置來執行操作(編譯原始檔、拷貝資原始檔)。 當 Maven 規約的預設配置不能夠滿足我們的需求時,我們就要動手修改專案的 Maven 配置,讓我們的專案能夠與 Maven 很好地協同工作。這裡

為什麼類的定義應當寫在標頭檔案中,從而被原始檔包含?

比如myclass.h定義了一個類myclass(只定義類,不定義成員函式), file1.cpp裡#include "myclass.h",編譯得到file1.obj; file2.cpp裡也#in

C++中一個頭檔案可以對應原始檔

// one *.h file can correspond two or more *.cpp files // or a class definition can distribute in more than one *.cpp files // par

Makefile 編譯生成可執行檔案

all:server client server:server.c gcc $< -o [email protected] client:client.c gcc $< -o [email protected] clean:   &nb

Makefile編譯檔案

all:easy_select tcp_select .PHONY:all easy_select:easy_select.c gcc $^ -o [email protected] tcp_select:tcp_select.c g

VSCode的(C/C++)原始檔編譯執行(Linux)

引言 VSCode作為微軟推出的一款免費的輕量級的整合開發環境,可謂是良心之作。它擁有VS的高顏值,而且像瑞士軍刀一樣,擁有豐富的外掛,c/c++、java、python、js、html等等,它都能輕鬆駕馭。 在這裡介紹關於多個C/C++原始檔在V

命令列模式下編譯C/C++原始檔

最近在學習linux,需要經常使用命令列,這時才發現熟悉命令列之後,命令列真的很強大,也很有逼格 由於在linux系統中需要在命令列格式下對C語言進行編譯,順便也研究了一下windows系統下的命令列編譯,感覺也蠻方便的。 單個原始檔編譯 linux系統下:g++ pro

makefile編譯目標

即然make可以指定所有makefile中的目標,那麼也包括“偽目標”,於是我們可以根據這種性質來讓我們的makefile根據指定的不同的目標來完成不同的事。在Unix世界中,軟體釋出時,特別是GNU這種開源軟體的釋出時,其makefile都包含了編譯、安裝、打包等功能。我們可以參照這種規則來書寫我們的mak

Makefile中使用 for 控制結構編譯目標檔案

假如,有很多檔案,每個檔案都要變成一個單獨的目標檔案,如果使用makefile的話,最好能用一個 for 迴圈來做。 makefile是支援使用 for的。 先假定有下面幾個檔案: a.h b.h test1.cpp test2.cpp $ cat a.h #if

Gradle 編譯project(包括Library庫project依賴)指導

pil 出現 基於 viewpage eclips support class 什麽 cor Gradle Android最新自己主動化編譯腳本教程(提供demo源代碼)這篇文章我簡單寫了基於Gradle2.1 進行的android project和android lib

使用gcc命令編譯文件

生成 src cloud 多個 .bat pan del 準備 後綴名 使用g++命令直接一次性編譯多個文件 這裏以簡單的HelloWorld程序為例,假設我們一共有三個文件:main.cpp,HelloWorld.cpp和HelloWorld.h. 其中HelloWo