makefile 编译多个目标
1、静态库libtools.a源码
libtools.h
#ifndef tools_h_
#define tools_h_
int sub(int x,int y);
int mul(int x,int y);
#endif
libtools.cpp
#include"libtools.h"
int sub(int x,int y)
{
return x - y;
} int mul(int x ,int y)
{
return x * y;
}
2、动态库libutility.so 源码
libutility.h
#ifndef utility_h_
#define utility_h_
int div(int x,int y);
#endif
libutility.cpp
#include"libutility.h" int div(int x,int y)
{
return x/y;
}
3、主程序源码
main.cpp
#include "libtools.h"
#include "libutility.h"
#include <stdio.h> int main()
{
printf("sub(10,7)=%d\n",sub(10,7));
printf("mul(3,3)=%d\n",mul(3,3));
printf("div(3,3)=%d\n",div(3,3));
return 0;
}
4、makefile
.PHONY:clean
all : libtools.a libutility.so hello libtools.a: libtools.o
ar rcs $@ $^ libtools.o:libtools.cpp libtools.h
gcc -o $@ -c libtools.cpp libutility.so: libutility.o
ld -shared -o $@ $^ libutility.o: libutility.cpp libutility.h
gcc -o $@ -c libutility.cpp hello:main.o
gcc -o $@ $^ -L./ -ltools -lutility main.o: main.cpp
gcc -o $@ -c $^ clean:
rm hello main.o libtools.a libtools.o libutility.so libutility.o
5、测试
编译前文件构成:

编译后文件构成:

执行结果:

makefile 编译多个目标的更多相关文章
- gcc与makefile编译 BY 四喜三顺
gcc编译控制过程:(假设源代码为a.c)(1)源文件到预处理文件: gcc -E -o a.cxx a.c a.cxx显示调用哪些头文件(2)生成汇编代码: g ...
- 【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间
打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多, ...
- Linux Makefile 编译速度的优化【转】
转自:https://blog.csdn.net/QQ1452008/article/details/51851801 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...
- live555学习(一)通读Makefile编译live555
live555学习(一)通读Makefile编译live555 live555 编译live555 学习开源 live555学习(一)通读Makefile编译live555 前言 live555简介 ...
- Makefile编写 三 伪目标的作用
本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标. 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标 ...
- Makefile:如何写目标依赖
本文并不是Makefile的教程,仅是本人学习时的感悟. Makefile的基本格式 目标:依赖文件(or 目标) [tab]命令 目标: 是要生成的或操作的命令的索引 依赖: 是生成目标依赖的文件或 ...
- CMake 工程调用 Makefile 编译项目
本文主要介绍如何将一个依赖 Makefile 项目(MIDG)移植到 CMake 上. 首先介绍项目文件结构,文件主要由三个目录组成 3rdParty include src 其中,3rdParty ...
- makefile 编译指定目录
makefile 编译指定目录 sub1=test1 sub2=test2 subs = sub1 sub2 SUBDIRS =$(foreach i, $(subs), $($(i))) .PHON ...
- Makefile:1: *** 多个目标匹配。 停止。
以下是我自己写的Makefile 文件: .SUFFIXES:.c .o CC = gcc SRCS = stat.c OBJS = $(SRCS:.c=.o) EXEC = test start:$ ...
随机推荐
- 【LeetCode】640. Solve the Equation 解题报告(Python)
[LeetCode]640. Solve the Equation 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: ht ...
- TensorFlow.NET机器学习入门【5】采用神经网络实现手写数字识别(MNIST)
从这篇文章开始,终于要干点正儿八经的工作了,前面都是准备工作.这次我们要解决机器学习的经典问题,MNIST手写数字识别. 首先介绍一下数据集.请首先解压:TF_Net\Asset\mnist_png. ...
- 源码分析 SpringCloud 2020.0.4 版本 EurekaClient 的注册过程
1. 概述 老话说的好:要善于思考,有创新意识. 言归正传,之前聊了 Springboot 的启动过程,今天来聊聊 Eureka Client 的注册过程. 2. Eureka Client 的注册过 ...
- 啥是Gossip协议?
你好呀,我是歪歪. 元旦的时候我看到一个特别离谱的谣言啊,具体是什么内容我就不说了,我怕脏了大家的眼睛. 但是,我看到一个群里传的那叫一个绘声绘色,大家讨论的风生水起的,仿佛大家就在现场似的. 这事吧 ...
- Python猫 2021 文章小结,翻译竟比原创多!
最近给自己放了两周的"长假",刷视频.看小说.玩游戏,就是不写文章不更新公众号. 半途而废的事情令得 2021 年的时间流逝加快,最后留下只是遗憾和不甘. 又到了新的一年,按照惯例 ...
- Ranger知识地图
自己总结的Ranger的学习路线和知识点, 提供给感兴趣的同学入门参考之用. Ranger入门路线 1.准备能够上网的电脑,Eclisp开发环境,Linux服务器等: 2.掌握Hadoop(HDFS/ ...
- C# .net 环境下使用rabbitmq消息队列
消息队列的地位越来越重要,几乎是面试的必问问题了,不会使用几种消息队列都显得尴尬,正好本文使用C#来带你认识rabbitmq消息队列 首先,我们要安装rabbitmq,当然,如果有现成的,也可以使用, ...
- 【工控老马】OPC通讯协议解析-OPC七问
1 通讯步骤 1.1 第一问 OPC Client和OPC Server之间通讯谁是主动的? 答:当然是OPC Client. 1.2 第二问 OPC Client第一次动作做了什么? 答:从大多数O ...
- Sentry 企业级数据安全解决方案 - Relay 运行模式
内容整理自官方开发文档 Relay 可以在几种主要模式之一下运行,如果您正在配置 Relay server 而不是使用默认设置,那么事先了解这些模式至关重要. 模式存储在配置文件中,该文件包含 rel ...
- html基础 下拉菜单和文本域的基本操作
结构代码 所在城市: <select > <option selected>北京</option> <option>上海</option> ...