Makefile学习(二)[第二版]

简介: 复杂实例#示例1:在上一个示例的基础上再增加一个可执行文件03test[修改之处已标红].

复杂实例

#示例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


目录
相关文章
|
SQL 缓存 Java
Flink SQL 核心解密 —— 提升吞吐的利器 MicroBatch
之前我们在 Flink SQL 中支持了 MiniBatch, 在支持高吞吐场景发挥了重要作用。今年我们在 Flink SQL 性能优化中一项重要的改进就是升级了微批模型,我们称之为 MicroBatch,也叫 MiniBatch2.0。
5681 0
|
机器学习/深度学习 数据采集 人工智能
Python 高级实战:基于自然语言处理的情感分析系统
**摘要:** 本文介绍了基于Python的情感分析系统,涵盖了从数据准备到模型构建的全过程。首先,讲解了如何安装Python及必需的NLP库,如nltk、sklearn、pandas和matplotlib。接着,通过抓取IMDb电影评论数据并进行预处理,构建情感分析模型。文中使用了VADER库进行基本的情感分类,并展示了如何使用`LogisticRegression`构建机器学习模型以提高分析精度。最后,提到了如何将模型部署为实时Web服务。本文旨在帮助读者提升在NLP和情感分析领域的实践技能。
914 0
|
分布式计算 Hadoop Shell
Hbase集群搭建
Hbase集群搭建
372 0
|
机器学习/深度学习 人工智能 自然语言处理
从文字到视频:借助ChatGPT与剪映轻松生成高质量视频
从文字到视频:借助ChatGPT与剪映轻松生成高质量视频
747 0
|
数据采集 SQL 分布式计算
阿里云大数据ACA及ACP复习题(241~250)
本人备考阿里云大数据考试时自行收集准备的题库,纯手工整理的,能够覆盖到今年7月份,应该是目前最新的,发成文章希望大家能一起学习,不要花冤枉钱去买题库背了,也希望大家能够顺利通关ACA和ACP考试。
|
Python
pygame
pygame
614 0
|
弹性计算 自然语言处理 达摩院
2022云栖精选—阿里云智能客服从提升生产力到提升客户忠诚度
摘要:本文整理自达摩院创新业务中心负责人聪云,在云栖大会的分享。本篇内容主要分为三个部分: 1. 背景概览 2. 升级新体验 3. 畅想未来
1334 0
2022云栖精选—阿里云智能客服从提升生产力到提升客户忠诚度
|
文字识别
阿里云商标智能注册275元费用价格、注册流程图文详解
阿里云商标智能注册275元包含10个项目,每多一项加收32元。阿里云商标智能注册申请流程包括商标基本信息填写、商标申请人填写等
1778 1
阿里云商标智能注册275元费用价格、注册流程图文详解
|
运维 安全 生物认证
无影将推动办公方式新变革-无影云电脑测评体验记录
无影云电脑的诞生,是众多用户的福利,我作为开发者社区的体验测评者,应当把无影云电脑系统的优势体验感以及不足之处给提出来,让无影更加的完善和安全。本人目前用的是无影云配置是4核8G,开通了互联网功能(10M带宽),系统用的是windows2016。
4610 11
无影将推动办公方式新变革-无影云电脑测评体验记录
|
Linux iOS开发 Windows
iphone14手机投屏到mac电脑最新教程
AirServer 是我最早接触到的 iOS 投电脑的软件。现在 AirServer 产品线已经丰富到“吓人”的地步,包含了投屏电脑(Windows、Surface、Mac)、游戏机(XBox)、电视(PhilipsTV)、嵌入式Linux设备对应版本的应用,甚至还提供了类似盒子 / AppleTV 的硬件解决方案 AirServer Connect。
786 0