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:$ ...
随机推荐
- 如何把 MySQL 备份验证性能提升 10 倍
JuiceFS 非常适合用来做 MySQL 物理备份,具体使用参考我们的官方文档.最近有个客户在测试时反馈,备份验证的数据准备(xtrabackup --prepare)过程非常慢.我们借助 Juic ...
- 【系统分析】《系统分析与设计方法》 Jeffrey L.Whitten 第1部分 系统开发环境 第3章 信息系统开发
1.解释为什么对企业来说,拥有一个标准的系统开发过程很重要. 开发过程的成熟,使项目时间和费用减少,生产率和质量提高 2.如何关联系统生命周期和系统开发方法学? 系统生命周期包含系统开发阶段,其中使用 ...
- Chapter 9 Measurement Bias
目录 9.1 Measurement Error The structure of measurement error 9.3 Mismeasured confounders 9.4 Intentio ...
- Capstone CS5263|DP转HDMI 4K60HZ转换芯片|CS5263芯片|替代PS176芯片
CS5263是一款DP转HDMI 4K60HZ音视频转换器芯片,不管在功能特性还是应用上都是可以完全替代兼容PS176.PS176是一个Display Port 1.2a到HDMI 2.0协议转换器, ...
- 生成对抗网络GAN与DCGAN的理解
作者在进行GAN学习中遇到的问题汇总到下方,并进行解读讲解,下面提到的题目是李宏毅老师机器学习课程的作业6(GAN) 一.GAN 网络上有关GAN和DCGAN的讲解已经很多,在这里不再加以赘述,放几个 ...
- Android开发布局 案例一
权重:就是在布局界面中所占的比例 实践案例: <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- 查看电脑内存是ddr3还是ddr4
内存不够用了 要加个内存 但是不想拆机 怎么知道自己电脑是第几代内存呢? 怎么知道频率呢? 1.运行cmd 2.输入wmic回车 3.输入memorychip回车 4.往右拉找到Speed Statu ...
- ProtoBuf3语法指南(Protocol Buffers)_上
0.说明 ProtoBuf3语法指南, 又称为proto3, 是谷歌的Protocol Buffers第3个版本. 本文基于官方英文版本翻译, 加上了自己的理解少量修改, 一共分为上下两部分. 1.序 ...
- 前端在线学习网站W3School
W3School在线学习网站 http://www.w3school.com.cn/ W3School是因特网上最大的WEB开发者资源,是完全免费的,是非营利性的, 一直在升级和更新,是W3C中国社区 ...
- 《selenium2 python自动化测试》(高清).PDF,免费无需任何解压密码
链接:https://pan.baidu.com/s/1eAI0mXvJeblBn2Tn9WClEA 提取码:7m5u