Makefile常用萬能模板(包括靜態鏈接庫、動態鏈接庫、可執行文件)

  • 1、生成可執行文件的makefile
  • 2、生成靜態鏈接庫的makefile
  • 3、生成動態鏈接庫的makefile

本文把makefile?分成了三份:生成可執行文件的makefile,生成靜態鏈接庫的makefile,生成動態鏈接庫的makefile。

  這些makefile都很簡單,一般都是一看就會用,用法也很容易,只需要把它們拷貝到你的代碼的同一目錄下,然后就可以用?make?來生成目標文件了。

  下面是三個makefile的源代碼:

回到頂部

1、生成可執行文件的makefile

復制代碼

######################################
#
######################################
#source file
#源文件,自動找所有.c和.cpp文件,并將目標定義為同名.o文件
SOURCE  := $(wildcard *.c) $(wildcard *.cpp)
OBJS    := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))#target you can change test to what you want
#目標文件名,輸入任意你想要的執行文件名
TARGET  := test#compile and lib parameter
#編譯參數
CC      := gcc
LIBS    :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS  := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H#i think you should do anything here
#下面的基本上不需要做任何改動了
.PHONY : everything objs clean veryclean rebuildeverything : $(TARGET)all : $(TARGET)objs : $(OBJS)rebuild: veryclean everythingclean :rm -fr *.sorm -fr *.overyclean : cleanrm -fr $(TARGET)$(TARGET) : $(OBJS)$(CC) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)

復制代碼

?

回到頂部

2、生成靜態鏈接庫的makefile

復制代碼

######################################
#
#
#######################################target you can change test to what you want
#共享庫文件名,lib*.a
TARGET  := libtest.a#compile and lib parameter
#編譯參數
CC      := gcc
AR      = ar
RANLIB  = ranlib
LIBS    :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS  := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H#i think you should do anything here
#下面的基本上不需要做任何改動了#source file
#源文件,自動找所有.c和.cpp文件,并將目標定義為同名.o文件
SOURCE  := $(wildcard *.c) $(wildcard *.cpp)
OBJS    := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE))).PHONY : everything objs clean veryclean rebuildeverything : $(TARGET)all : $(TARGET)objs : $(OBJS)rebuild: veryclean everythingclean :rm -fr *.overyclean : cleanrm -fr $(TARGET)$(TARGET) : $(OBJS)$(AR) cru $(TARGET) $(OBJS)$(RANLIB) $(TARGET)

復制代碼

?

回到頂部

3、生成動態鏈接庫的makefile

復制代碼

######################################
#
#
#######################################target you can change test to what you want
#共享庫文件名,lib*.so
TARGET  := libtest.so#compile and lib parameter
#編譯參數
CC      := gcc
LIBS    :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS  := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
SHARE   := -fPIC -shared -o#i think you should do anything here
#下面的基本上不需要做任何改動了#source file
#源文件,自動找所有.c和.cpp文件,并將目標定義為同名.o文件
SOURCE  := $(wildcard *.c) $(wildcard *.cpp)
OBJS    := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE))).PHONY : everything objs clean veryclean rebuildeverything : $(TARGET)all : $(TARGET)objs : $(OBJS)rebuild: veryclean everythingclean :rm -fr *.overyclean : cleanrm -fr $(TARGET)$(TARGET) : $(OBJS)$(CC) $(CXXFLAGS) $(SHARE) $@ $(OBJS) $(LDFLAGS) $(LIBS)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TSQLDBServerHttpApi使用工作線程池

TSQLDBServerHttpApi使用工作線程池 TSQLDBServerHttpApi創建時,默認是使用單線程模式,且只使用一個數據庫連接,服務端要應對眾多的客戶端只靠一個工作線程(主線程)和一個數據庫連接, 服務端主線程不忙死才…

hibernate

Hibernate是一個開放源代碼的對象關系映射框架,他對JDBC進行了輕量級的封裝,使Java開發員可以隨心所欲的使用對象編程思維操作數據庫。 SessionFactory接口負責初始化Hibernate.他充當數據儲存源的代理,并負責創建Session對象。 Session&…

Python數據分析之pandas入門

一、pandas庫簡介 pandas是一個專門用于數據分析的開源Python庫,目前很多使用Python分析數據的專業人員都將pandas作為基礎工具來使用。pandas是以Numpy作為基礎來設計開發的,Numpy是大量Python數據科學計算庫的基礎,pandas以此為基礎&#x…

激光雷達和毫米波雷達的區別

什么是激光雷達 激光雷達,是以發射激光束探測目標的位置、速度等特征量的雷達系統。其工作原理是向目標發射探測信號(激光束),然后將接收到的從目標反射回來的信號(目標回波)與發射信號進行比較&#xff0c…

Git—使用方法

1、:插件的安裝(eclipse LUNA版本之后已經自動集成,不需要安裝插件)、 * 先打開該網頁提供了對應版本的EGit,自己選擇相應的版本。(http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of_EGit.3F&…

激光雷達與毫米波雷達對比

激光雷達是一種采用非接觸激光測距技術的掃描式傳感器,其工作原理與一般的雷達系統類似,通過發射激光光束來探測目標,并通過搜集反射回來的光束來形成點云和獲取數據,這些數據經光電處理后可生成為精確的三維立體圖像。采用這項技…

安全可靠國產系統下的應用怎么搭建?

據國家信息安全漏洞共享平臺(CNVD)統計數據,2016年我國共收錄通用軟硬件漏洞 10822個,漏洞來源涵蓋了眾多知名的國外廠商。應用軟件的不安全性對我國信息技術發展產生了重大威脅,近年來我國頻繁發布信息安全相關政策&a…

Win10 + Python + MXNet + VS2015配置

項目需要使用MTCNN來檢測、對齊、剪切出人臉,它是使用MXNet作為框架的,但是我自己的Ubuntu里各種框架亂成一團,不想再添亂就鐵了心要在windows里配一個。無奈網上的資料不多,掙扎了幾天之后決定留下這么一份文檔。 首先我們使用的…

bzoj 3224 Tyvj 1728 普通平衡樹

題目大意: 您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 1. 插入x數 2. 刪除x數(若有多個相同的數,因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&#xff0c…

不懂毫米波雷達?5分鐘讀懂毫米波雷達的那些事兒

2019年是毫米波風生水起的一年,也是毫米波名聲大噪的一年。毫米波應用范圍廣泛,如毫米波雷達、毫米波天線等。而本文,將向大家介紹毫米波雷達,主要內容包括:毫米波雷達原理、毫米波雷達主要特點、毫米波雷達優勢以及毫…

飛鴿傳書(IPMSG)協議(翻譯稿)

協議聲明: 本協議是由日本人Shirouzu Hiroaki (白水 啟章)先生編寫。 wanpengcoder翻譯于Mr.Kanazawa英文文檔,轉載請注明出處。 http://www.cnblogs.com/wanpeng/ 如有翻譯不當之處望提出,以便改進,衷心感…

redis集群的搭建

########環境######### centos 7.2 , gcch 環境ruby 2.0.0 redis 3.2.8 redis-3.3.3gem 公司要求搭建redis集群, 本來覺得挺好搞的,沒想到弄到現在.... 1, 環境準備 gcc , ruby 等環境準備 yum -y install gcc ruby ruby-devel rubygems rpm-build zlib redis-ruby接口安裝, 我…

2017-2018-1 20155227 《信息安全系統設計基礎》第十三周學習總結

2017-2018-1 20155227 《信息安全系統設計基礎》第十三周學習總結 找出全書你認為最重要的一章,深入重新學習一下,要求(期末占10分): 完成這一章所有習題詳細總結本章要點給你的結對學習搭檔講解你的總結并獲取反饋我選…

進程間五種通信方式

進程間通信(IPC,InterProcess Communication)是指在不同進程之間傳播或交換信息。 IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中 Socket和Streams支持不同主機…

電子書下載:Silverlight 5 in Action

下載:http://www.ctdisk.com/file/8447319

git 的使用方法

git 的使用有3個主要步驟: 1.1 工作區域操作: 在自己的git賬號下構建一個工作目錄, 并往工作目錄里添加文件內容(cp /root/data/VIP_Amount_prediction/* ./)。 cd 當前工作目錄, git init, 初始…

Codeforces 898E Squares and not squares

題目大意 給定 $n$($n$ 是偶數,$2\le n\le 2\times 10^{5}$)個非負整數 $a_1,\dots, a_n$($a_i\le 10^9$)。 要求將其中 $n/2$ 個數變成平方數,另外 $n/2$ 個數變成非平方數,變化后的數必須仍是…

UTC時間

每個地區都有自己的本地時間,在網上以及無線電通信中時間轉換的問題就顯得格外突出。我自己就經常混淆于此,特地研究了一下,記錄在此以備忘。 整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合&#xff…

Virtualbox橋接網卡設置

正常情況下,像設置virtualbox虛擬機的橋接網卡非常簡單,只需要點配置,然后在配置界面點擊網絡,然后在右邊的網絡里選擇橋接網絡即可。但是如果這么簡單就好了,今天要說的就是在不正常的情況下是怎么設置的。 工具/原料…

利用CSS、JavaScript及Ajax實現圖片預加載的三大方法

預加載圖片是提高用戶體驗的一個很好方法。圖片預先加載到瀏覽器中,訪問者便可順利地在你的網站上沖浪,并享受到極快的加載速度。這對圖片畫廊及圖片占據很大比例的網站來說十分有利,它保證了圖片快速、無縫地發布,也可幫助用戶在…