博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Makefile学习(二)[第二版]
阅读量:6039 次
发布时间:2019-06-20

本文共 2836 字,大约阅读时间需要 9 分钟。

复杂实例

#演示样例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.cppint 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.hint pub(int a,char *ch,int b);
//3 main.cpp#include 
#include
#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

你可能感兴趣的文章
gulp压缩合并js与css
查看>>
块级、内联、内联块级
查看>>
Predicate
查看>>
[面试题记录01]实现一个function sum达到一下目的
查看>>
这个季节的忧伤,点到为止
查看>>
mysql通过配置文件进行优化
查看>>
省级网站群建设关注点
查看>>
工作第四天之采集资源
查看>>
innobackupex 在增量的基础上增量备份
查看>>
Windows Server 2012 R2 DirectAccess功能测试(2)App1服务器安装及配置
查看>>
基于清单的启动器的实现
查看>>
外网用户通过citrix打印慢的解决方法
查看>>
STL容器的使用
查看>>
关于std::map
查看>>
JXL导出Excel文件兼容性问题
查看>>
VBoot1.0发布,Vue & SpringBoot 综合开发入门
查看>>
centos7 安装wps 后 演示无法启动
查看>>
git简单命令
查看>>
LAMP编译部署
查看>>
XenDesktop7.6安装部署入门教程
查看>>