1. 程式人生 > >Makefile錦集(持續更新中)

Makefile錦集(持續更新中)

1、為每個原始檔生成一個可執行程式

使用場景:目錄下的所有原始檔都能生成可執行程式。如在做《C++ Primer》練習時,每個練習都是一個獨立的小程式,不必為每個練習編寫一個Makefile,也不必為每個練習執行g++編譯。

CC :=gcc 
CFLAGS := -g -Wall 
SOURCES := $(wildcard *.c)
TARGETS := $(patsubst %.c,%,$(SOURCES))

#define a function
define MAKE_EACH_SRC_BIN
$1:$1.c
	$(CC) $(CFLAGS) $< -o [email protected]
endef all:$(TARGETS) $(foreach target,$(TARGETS),$(call MAKE_EACH_SRC_BIN $(target))) clean: rm -rf $(TARGETS)

2、通用性較強的Makefile

使用場景:可以應對大多數型別的工程,包含多個目錄的工程,不必為每個目錄編寫一個Makefile。自動生成標頭檔案依賴,不必因改變標頭檔案而make clean。

GROOT     :=$(shell pwd)
PROGRAM   := iked
SRCDIRS   := . ./isakmp ./ikev1 ./crypto
SRCEXTS   := .c .cc
CPPFLAGS  := -Wall -Werror -g -m32
CFLAGS    :=  
CFLAGS    += 
CXXFLAGS  := -I/usr/local/openssl/include
CXXFLAGS  += -I$(GROOT)/ -I$(GROOT)/isakmp -I$(GROOT)/crypto -I$(GROOT)/ikev1
LDFLAGS   := -lpthread -L/usr/local/openssl/lib -lcrypto -ldl
LDFLAGS   += -m32 

#CC      = gcc 
#CXX     = g++ 
#CC      = $(CXX)  
#CFLAGS  = $(CXXFLAGS) 
#RM        = rm -f

SHELL   = /bin/sh  
SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))  
OBJS    = $(foreach x,$(SRCEXTS), $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))
DEPS    = $(patsubst %.o,%.d,$(OBJS))  
.PHONY : all objs clean cleanall rebuild  
all : $(PROGRAM) 

%.d : %.c  
	@$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o 
[email protected]
%.d : %.C @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o [email protected] %.d : %.cc @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o [email protected] %.d : %.cpp @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o [email protected] %.d : %.CPP @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o
[email protected]
%.d : %.c++ @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o [email protected] %.d : %.cp @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o [email protected] %.d : %.cxx @$(CC) -MM -MT ${@:%.d=%.o} -MD $(CXXFLAGS) $< -o [email protected] objs : $(OBJS) %.o : %.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o [email protected] %.o : %.C $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] %.o : %.cc $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] %.o : %.cpp $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] %.o : %.CPP $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] %.o : %.c++ $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] %.o : %.cp $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] %.o : %.cxx $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] $(PROGRAM) : $(OBJS) ifeq ($(strip $(SRCEXTS)), .c) # C file $(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS) else # C++ file $(CXX) -o $(PROGRAM) $(OBJS) $(LDFLAGS) endif -include $(DEPS) rebuild: clean all clean : @$(RM) $(OBJS) $(DEPS) cleanall: clean @$(RM) $(PROGRAM) $(PROGRAM).exe


相關推薦

Makefile持續更新

1、為每個原始檔生成一個可執行程式使用場景:目錄下的所有原始檔都能生成可執行程式。如在做《C++ Primer》練習時,每個練習都是一個獨立的小程式,不必為每個練習編寫一個Makefile,也不必為每個練習執行g++編譯。CC :=gcc CFLAGS := -g -Wal

atcoder題目合持續更新

Choosing Points 數學 Integers on a Tree 構造 Leftmost Ball 計數dp+組合數學 Painting Graphs with AtCoDeer tarjan+polya Building Cubes with AtCoDeer 列舉 AtCo

【題解】洛谷各種字串問題合持續更新

洛谷 P1449 字尾表示式 這道題需要手動模擬棧的操作。讀入字元,當字元不為終止字元@時,如果讀入的是數字就用now記錄下它的值,如果讀入的是 . 就將得到的數字值放到棧頂,並清空now。當讀到運算子時,就拿棧頂元素下面的第一個元素和棧頂元素進行加減乘除的操作,並將棧頂清

HTML5+Bootstrap後臺系統框架持續更新……

HTML5+Bootstrap後臺系統框架集(更新時間:2017年1月8日。持續更新中……)科普:Bootstrap (Web框架):Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。

PTA|團體程式設計天梯賽-練習題目題解C/C++持續更新……

PTA|團體程式設計天梯賽-練習題目題解錦集(持續更新中) 實現語言:C/C++;      歡迎各位看官交流討論、指導題解錯誤;或者分享更快的方法!! 題目連結:https://pintia.cn/problem-sets/994805046380707

PHP開發錯誤持續更新

1、trait 命名問題。 問題:trait 裡定義的方法找不到 &lt;?php namespace app\controllers; trait Example { public function example(); } class Foo { use Exampl

免費資料下載持續更新...

分門別類整理了一些網上的免費資料集,這是分類下載地址,希望能節約大家找資料的時間。歡迎資料達人加入QQ群 565136792 交流。 金融 交通 商業 推薦系統 醫療健康 影象資料 綜合影象 場景影象 Web標籤影象 人形輪廓影象 視覺文字識別影象 特定一類事物影象 材質紋理影象 物體分類影象 人臉影象 姿

IT(計算機/軟件/互聯網)專業詞匯寶典持續更新

hub point charger 中國 mar asi lose 社區 less 1.Stack Overflow:http://stackoverflow.com/ .一個著名的IT技術的問答站點。全然免費。程序猿必知。2.programmer:程序猿3.e

git的常用語句持續更新

文件 版本 reflog 使用 一個 更改 commit sta add mkdir learngit // 創建文件夾cd learngit //跳轉到指定文件夾pwd //顯示當前文件夾路徑git init //把這個目錄變成可管理的倉庫git add learngi

ASP.NET MVC5+EF6+EasyUI 後臺管理系統1-前言與目錄持續更新...

編碼規範 圖標 pri log 任務 ros 部署 基本 form 開發工具:VS2015(2012以上)+SQL2008R2以上數據庫    您可以有償獲取一份最新源碼聯系QQ:729994997 價格 666RMB 升級後界面效果如下: 日程管理 http://

一句話題解持續更新

ron noi rdquo 括號 出現 eps sof 單調性 滾動 8.1 bzoj 4720 noip2016 換教室 floyd預處理+期望(薛定諤的貓) bzoj 4318 OSU! 三次函數期望值 從一次、二次推得 8.2 bzoj 1076 狀壓+期望D

關於Yii2的MVC的視圖總結持續更新

gif pre lis frontend dbo register front reg open 一、首先在控制器中,將處理好的數據發送給前臺: $this->layout = ‘base‘; 這裏填寫視圖的模板文件(可以不寫這行代碼,如果不寫,默認為views/la

java基礎知識匯總持續更新....

方法區 管理 執行 中間 inter print method arch end 1.java四大特性:抽象、繼承、封裝,多態 構造函數: http://blog.csdn.net/qq_33642117/article/details/51909346   

第11章—常用註解持續更新

導入 rest class entity auto config cati param tee spring boot 系列學習記錄:http://www.cnblogs.com/jinxiaohang/p/8111057.html 碼雲源碼地址:https://gitee

golang開發常用開源項目工具持續更新

golang開源項目 golang工具 本人在日常golang項目開發中,用到了一些第三方開源庫,大多都是優秀的開源項目,源碼值得認真閱讀研究。在此記錄用到的一些庫:解析配置文件go-ini https://github.com/go-ini/inigolang開發常用開源項目工具(持續更新中)

談談對事件的理解持續更新

use 通過 行為 tlist 理解 scrip 創建 可能 有時 談談對事件的理解: 從前有一家人,我們稱為window家。window他其中有一個兒子叫事件。 -------------------------------------------------------

前端開發工程師從入門到精通學習過程及資源總結持續更新

開發實戰 set dex 從入門到精通 main 知識 uno 基礎入門 易雲 職位名稱:前端開發工程師 學習概要:1、先了解基礎,html/css/JavaScript是基礎。html/css就是做靜態頁面的,javascript是做動態的。 2、學習框架:jQuery(

CS231N作業記錄持續更新

ssi net tail 安裝ipython ipy 工作 href https 準備 參考資料:《 cs231n 課程作業 Assignment 1 》https://blog.csdn.net/zhangxb35/article/details/55223825 一

自動化運維之Ansible概述及Ansible部署|持續更新

nss red hat 優秀 分發 程序 paramik and gho 統一 Ansible概述 由於互聯網的快速發展導致產品更新換代速度逐漸加快,運維人員每天都要進行大量的維護操作,仍舊按照傳統方式進行維護使得工作效率低下。這時,部署自動化運維就可以盡可能安全,高效地完