gcc命令以及makefile文件
(一)makefile里涉及到的gcc命令
gcc -I./inc:指定头文件寻找目录
将按照 ./inc --> /usr/include --> /usr/local/include的顺序寻找头文件
gcc -L./lib:指定库文件的寻找目录
将按照 ./lib --> /usr/lib --> /usr/local/include的顺序寻找库文件
gcc -ltest
将使用libtest.so动态链接库或libtest.a静态链接库,优先使用libtest.so
gcc -static -ltest
将强制使用libtest.a静态链接库
编译生成动态链接库:
gcc -o *.c -fPIC -c *.c //-fPIC指明生成和地址无关的目标文件
gcc -o libtest.so -shared *.o //在连接过程中指定-shared,即生成共享形式的目标文件
gcc -o target -L./lib -ltest -Wl,-rpath=./lib //-Wl,-rpath=./lib指定运行时的库文件路径
生成静态库:
gcc -o *.o -c *.c
ar crs libtest.a *.o //libtest.a可以看做是将.o文件进行了打包
gcc -o target -L./lib -ltest
(二)makefile文件
1 只有一个或多个源文件
CC=gcc
CFLAGS=-Wall -std=gnu99 TARGET=test
SRCS=test.c
OBJS=${SRCS:.c=.o} ${TARGET}:${OBJS}
${CC} -o $@ $^
clean:
rm -rf ${TARGET} ${OBJS}
%.o:%.c
${CC} ${CFLAGS} -o $@ -c $<
2 源文件在src下,头文件在inc下
CC=gcc
CFLAGS=-Wall -std=gnu99
INC=-I./inc TARGET=test
SRCS=./src/test.c ./src/test_add.c ./src/test_min.c
OBJS=${SRCS:.c=.o} ${TARGET}:${OBJS}
${CC} -o $@ $^
rm -rf ${OBJS}
clean:
rm -rf ${TARGET} ${OBJS} %.o:%.c
${CC} ${FLAGS} ${INC} -o $@ -c $<
3 链接阶段添加动态链接库
CC=gcc
CFLAGS=-Wall -std=gnu99 TARGET=test
SRCS=./src/test.c ./src/test_add.c
OBJS=${SRCS:.c=.o}
INC=-I./inc
DLIBS=-lm ${TARGET}:${OBJS}
${CC} ${DLIBS} -o $@ $^
rm -rf ${OBJS} clean:
rm -rf ${OBJS} ${TARGET} %.o:%.c
${CC} ${FLAGS} ${INC} -o $@ -c $<
4 编译动态链接库
CC=gcc
CFLAGS=-Wall -std=gnu99 TARGET=libtest.so
SRCS=./src/test.c ./src/test_add.c ./src/test_min.c
OBJS=${SRCS:.c=.o}
INC=-I./inc ${TARGET}:${OBJS}
${CC} ${CFLAGS} -shared -o $@ $^
rm -rf ${OBJS}
clean:
rm -rf ${OBJS} ${TARGET} %.o:%.c
${CC} ${CFLAGS} ${INC} -o $@ -fPIC -c $<
gcc命令以及makefile文件的更多相关文章
- 简介make命令和makefile文件
一.为什么要用到 make 命令和 makefile 文件 在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令.如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于 ...
- make命令和makefile文件
make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具,它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录. makefile文件由一组依赖关系 ...
- Shell脚本——make命令和Makefile文件【转】
https://blog.csdn.net/twc829/article/details/72729799 make命令是一个常用的编译命令,尤其在C/C++开发中,make命令通过makefile文 ...
- 【C编程基础】make命令和makefile文件
1.关于程序的编译和链接 一般来说,无论是C.C++首先要把源文件编译成中间目标文件即 Object File(windows为.obj文件,unix为.o文件),这个动作叫做编译(compile). ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- make命令以及makefile
make命令以及makefile使用RCS与CVS进行源代码控制编写手册页使用patch与tar发布软件开发环境 多源代码的问题 当我们编写小程序时,许多人都是简单的在编辑后通过重新编译所有的文件重新 ...
- 工程管理之makefile与自动创建makefile文件过程
(风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自动编译和链接使用的环境 想知道到Linux Makefile系统的 ...
- 单文件夹下的C程序如何编写Makefile文件
通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件. 我们已经知道在linux环境下编译源码时,常会有以下三个步骤: ./configure make make clea ...
- project管理之makefile与自己主动创建makefile文件过程
(风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自己主动编译和链接使用的环境 想知道到Linux Makefile系 ...
随机推荐
- HW3.15
import java.util.Scanner; public class Solution { public static void main(String[] args) { int lotte ...
- Kooboo中怎么写Page Plugin -摘自官方文档
Page plugin development Page plugin is an add-on to Kooboo CMS, and is responsible for making data s ...
- A Tour of Go Variables
The var statement declares a list of variables; as in function argument lists, the type is last. pac ...
- GitHub初次使用记录(一)
1.从GitHub上克隆或者复制别人的档案库:
- javascript中使用md5函数
javascript中使用md5函数 这对于js来讲本来是没有的,现在可以自己定义一个md5的函数,达到加密效果. var hexcase = 0; function hex_md5(a) { if ...
- 使用Ready2Search来定制Firefox和Chrome的搜索框
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用Ready2Search来定制Firefox和Chrome的搜索框.
- 【JAVA - SSM】之MyBatis查询缓存
为了减轻数据压力,提高数据库的性能,我们往往会需要使用缓存.MyBatis为我们提供了一级缓存和二级缓存. (1)一级缓存是SqlSession级别的缓存,在操作数据库的时候需要创建一个SqlSess ...
- jbpm与spring hibernate struts整合
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- PS Studio打包程序 .net版本依赖
PS Studio打包好的程序(Win7下),拿到Windows Server 2003(PS2.0),如果提示”.Net framework初始化错误“,则需要安装 .net 3.0 如果是PS3. ...
- C语言中怎么求动态数组大小
先来个简单的样例 int a[] = {1,2,3}; int arr_len = 0; arr_len = sizeof(a)/sizeof(int); 解释:sizeof() keyword是求出 ...