Makefile学习(三)[第二版]
来源:互联网 发布:网络与系统攻击技术 编辑:程序博客网 时间:2024/04/30 21:35
复杂实例
#示例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;
- }
- //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.cppOBJC=$(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 compilerCC = g++ # Where are include files keptINCLUDE = . # Options for developmentFLAGS = -g -Wall -ansi # Options for release# CFLAGS = -O -Wall -ansi .SUFFIXES:.cpp .o SOURCE = main.cpp pub.cppOBJC = $(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 compilerCC = g++ # Where to installINSTDIR = /usr/local/bin/ # Where are inlude files keptINCLUDE = . # Options for developmentCFLAGS = -g -Wall -ansi # Options for release# CFLAGS = -O -Wall -ansi .SUFFIXES: .cpp .o SOURCE = main.cpp pub.cppOBJECT = $(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
0 0
- Makefile学习(三)[第二版]
- Makefile学习(三)[第二版]
- Makefile学习(一)[第二版]
- Makefile学习(二)[第二版]
- Makefile学习(一)[第二版]
- Makefile学习(二)[第二版]
- Makefile学习(三)
- Makefile学习(三)
- Makefile学习笔记(三)
- makefile学习笔记(三)
- 学习makefile(三)--书写规则
- makefile第二版发布了
- 学习Makefile第二课------总述
- Makefile 学习日记(三)——makefile的瘦身
- 《代码大全第二版》学习笔记(三)
- C++ 学习笔记(三) 编写makefile
- Makefile 学习笔记(三)实例
- GNU Makefile学习专题(二) | 第二个实例
- 通过JDBC获取数据库连接
- KK版本手机没有外置T卡卡座,如何去掉外置T卡
- subversion edge
- 十四章上机练习4
- 将bitmap生成圆角
- Makefile学习(三)[第二版]
- android Dagger2依赖注入框架总结
- 医电园——开启医疗器械在线交易新模式
- maven 编译报错 java: -source 1.5 中不支持switch 中存在字符串
- 自定义View实现进度条
- Github pages is pretty cool
- 【bzoj3246】 Ioi2013—Dreaming
- SpringMvc 中RedirectAttributes对象重定向传参
- 关于Spring事务<tx:annotation-driven/>的理解。