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)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvempmMjgwNDQxNTg5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
附-假设一条语句在运行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
Makefile学习(二)[第二版]的更多相关文章
- Makefile学习(一)[第二版]
简单介绍 1)make:利用 make 工具能够自己主动完毕编译工作.这些工作包含:假设仅改动了某几个源文件,则仅仅又一次编译这几个源文件[make通过比对对应的.c文件与.o文件的时间];假设某个头 ...
- gcc学习(二)[第二版]
头文件与库文件 1.概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明. 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的.它 ...
- Makefile学习(三)[第二版]
make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...
- gdb学习(二)[第二版]
查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype ...
- TensorFlow 深度学习中文第二版·翻译完成
原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...
- python基础学习二——第二天
对于python而言,一切事物都是对象,对象是基于类创建的,对象继承了类的属性,方法等特性 一.int 首先我们来查看一下int包含了哪些函数 # python3.x dir(int) # ['__a ...
- Makefile学习二
今天继续对Makefile进行研究,话不多说,进入正题: make常用内嵌函数: 下面利用上面的知识点来实现一个多级目录的Makefile,如下: 多级目录Makefile: 这个例子的目录结构如下: ...
- gcc学习(一)[第二版]
gcc简介 1. gcc是GNU Compiler Collection的缩写.最初是作为C语言的编译器(GNU C Compiler),作者为Richard Stallman,是GNU项目的奠基者 ...
- gdb学习(一)[第二版]
概述 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式) ...
随机推荐
- Java安全机制之泛型(JDK1.5)
泛型,类型安全机制. 好处: 1.将运行时期出现问题ClassCastException转移到了编译时期,方便解决问题,减少运行时期的问题,有利于程序的健壮性. 2.避免了强制转换的麻烦 泛型格式: ...
- PHP学习笔记11-表单
处理GET请求 实现的功能是输入姓名后页面显示“Hello XXX” 创建html文件hello.html: <!DOCTYPE html> <html> <head l ...
- awk参数详解
wk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F| ...
- hdu1695 GCD
http://acm.hdu.edu.cn/showproblem.php?pid=16951 /** 大意: a<=x<=b , c<= y <= d ,求在此范围内 有多少 ...
- C# Programming Study #1
引用的时候需要在参数和使用的时候加上 ref 关键字 static bool addnum (ref int val) //引用 { ++val; return true; } 参数数组的概念,可以接 ...
- Mac上使用Visual Studio Code开发/调试.NET Core代码
Mac上使用Visual Studio Code开发/调试.NET Core代码 .Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今 ...
- 转: 用css把图片转为灰色图
小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...
- Visual Studio 2013 Xamarin for iOS 环境搭建
原文:Visual Studio 2013 Xamarin for iOS 环境搭建 一.Mac安装Xamarin.iOS 1,我的Mac 环境:OSX 10.10.3.Xcode 6.3.2 (使用 ...
- 给EditText中的图片加监听
package com.example.helloword; import android.app.Activity; import android.content.Context; import a ...
- Python基础 3----文件和网络
1 Python文件IO 1 标转的输入和输出 print 方法:输出数据到标准的输出 raw_input 方法:标准的输入 2 file文件类 读文件 f = file(文件名, 模式) 有5种模式 ...