Makefile学习(二)[第二版]
復雜實例
#示例1:在上一個示例的基礎上再增加一個可執行文件03test[修改之處已標紅]
.PHONY:?clean?all?
?
CC?=?gcc?
CFLAGS?=?-Wall?-g
BIN?=?01test?02test?03test
SOURCES?=?$(BIN:=.c)
OBJECTS?=?$(BIN:=.o)
?
all:?$(BIN)
?
01test:?01test.o
02test:?02test.o
03test:?03test.o
?
.c.o:
????$(CC)?$(CFLAGS)?-c?$<?-o?$@
?
clean:
????-rm?-rf?$(BIN)?$(OBJECTS)
?
#示例2:在示例1上為03test添加一個自編的頭文件pub.h[修改之處已標紅]
.PHONY:?clean?all?
?
CC?=?gcc?
CFLAGS?=?-Wall?-g
BIN?=?01test?02test?03test
SOURCES?=?$(BIN:=.c)
OBJECTS?=?$(BIN:=.o)
?
all:?$(BIN)
?
01test:?01test.o
02test:?02test.o
03test:?03test.o?pub.o
?
.c.o:
????$(CC)?$(CFLAGS)?-c?$<?-o?$@
?
clean:
????-rm?-rf?$(BIN)?$(OBJECTS)
?
一個比較復雜的綜合示例
//1 pub.cpp int pub(int a,char *ch,int b) {char c = ch[0];switch(c){case '+':return a+b;break;case '-':return a-b;break;case '*':return a*b;break;case '/':if (b != 0){ return a/b;} else{ return -1;}break;default:return -1;break;}return 0; }
//2 pub.h int pub(int a,char *ch,int b);
//3 main.cpp #include <iostream> #include <stdlib.h> #include "pub.h" using namespace std;int main(int argc,char *argv[]) {if (argc < 4){ cerr << "error" << endl;return -1; } cout << argv[1] << ' ' << argv[2] << ' ' << argv[3] << " = " << pub(atoi(argv[1]),argv[2],atoi(argv[3])) << endl;return 0; }
#4?Mackfile
.SUFFIXES:.cpp?.o
?
CC=g++
SOURCE=main.cpp?pub.cpp
OBJC=$(SOURCE:.cpp=.o) #將.cpp文件全部替換為.o文件
EXEC=mytest
?
all:$(OBJC)
$(CC)?-o?$(EXEC)?$(OBJC)
?
.cpp.o:
$(CC)?-o?$@?-c?$<
?
clean:
rm?-rf?$(OBJC)
附-如果一條語句在執行Mackfile文件時,不想打印出來,則在其前面加上@符號
?
比較專業的Makefile編寫
#示例1
all:?myapp
?
#?Which?compiler
CC?=?g++?
?
#?Where?are?include?files?kept
INCLUDE?=?.
?
#?Options?for?development
FLAGS?=?-g?-Wall?-ansi
?
#?Options?for?release
#?CFLAGS?=?-O?-Wall?-ansi
?
.SUFFIXES:.cpp?.o
?
SOURCE?=?main.cpp?pub.cpp
OBJC?=?$(SOURCE:.cpp=.o)
EXEC?=?myapp
?
$(EXEC):?${OBJC}
$(CC)?-o?$(EXEC)?$(OBJC)?
?
.cpp.o:
$(CC)?-o?$@?-I$(INCLUDE)?$(FLAGS)?-c?$<
?
clean:
rm?-rf?$(OBJC)?$(EXEC)
?
?
#示例2-添加了install選項
all:?myapp
?
#?Which?compiler
CC?=?g++?
?
#?Where?to?install
INSTDIR?=?/usr/local/bin/
?
#?Where?are?inlude?files?kept
INCLUDE?=?.
?
#?Options?for?development
CFLAGS?=?-g?-Wall?-ansi
?
#?Options?for?release
#?CFLAGS?=?-O?-Wall?-ansi
?
.SUFFIXES:?.cpp?.o
?
SOURCE?=?main.cpp?pub.cpp
OBJECT?=?$(SOURCE:.cpp=.o)
EXEC???=?myapp
?
$(EXEC):?$(OBJECT)
????$(CC)?-o?$(EXEC)?$(OBJECT)
?
.cpp.o:
????$(CC)?-I$(INCLUDE)?$(CFLAGS)?-o?$@?-c?$<
?
clean:
????-rm?-rf?$(OBJECT)
?
install:?$(EXEC)
????@if?[?-d?$(INSTDIR)?]?;?then?\
????????cp?$(EXEC)?$(INSTDIR)?;?\
????????chmod?a+x?$(INSTDIR)/$(EXEC)?;?\
????????chmod?og-w?$(INSTDIR)/$(EXEC)?;?\
????????echo?"Installed?in?$(INSTDIR)"?;?\
????else?\
????????echo?"Sory,?$(INSTDIR)?does?not?exist."?;?\
????fi
轉載于:https://www.cnblogs.com/itrena/p/5927014.html
總結
以上是生活随笔為你收集整理的Makefile学习(二)[第二版]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交行Y-POWER信用卡年费多少?免年费
- 下一篇: android+ import R错误