(一)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文件的更多相关文章

  1. 简介make命令和makefile文件

    一.为什么要用到 make 命令和 makefile 文件 在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令.如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于 ...

  2. make命令和makefile文件

    make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具,它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录. makefile文件由一组依赖关系 ...

  3. Shell脚本——make命令和Makefile文件【转】

    https://blog.csdn.net/twc829/article/details/72729799 make命令是一个常用的编译命令,尤其在C/C++开发中,make命令通过makefile文 ...

  4. 【C编程基础】make命令和makefile文件

    1.关于程序的编译和链接 一般来说,无论是C.C++首先要把源文件编译成中间目标文件即 Object File(windows为.obj文件,unix为.o文件),这个动作叫做编译(compile). ...

  5. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

  6. make命令以及makefile

    make命令以及makefile使用RCS与CVS进行源代码控制编写手册页使用patch与tar发布软件开发环境 多源代码的问题 当我们编写小程序时,许多人都是简单的在编辑后通过重新编译所有的文件重新 ...

  7. 工程管理之makefile与自动创建makefile文件过程

    (风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自动编译和链接使用的环境 想知道到Linux Makefile系统的 ...

  8. 单文件夹下的C程序如何编写Makefile文件

    通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件. 我们已经知道在linux环境下编译源码时,常会有以下三个步骤: ./configure make make clea ...

  9. project管理之makefile与自己主动创建makefile文件过程

    (风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自己主动编译和链接使用的环境 想知道到Linux Makefile系 ...

随机推荐

  1. PHP使用IP地址连接MySQL数据库

    我们通常测试的时候都是用mysql_connect("localhost","usrname","password");的方式来连接MySQ ...

  2. 【Mysql学习笔记】浅析mysql的binlog

    最近读一份关于“数据库事务故障恢复"的技术资料,发现对mysql的binlog的认识不够清楚,查阅mysql reference manual有所收获,作为笔记,记录于此. 1. What' ...

  3. [置顶] 斗地主算法的设计与实现--项目介绍&如何定义和构造一张牌

    大学期间,我在别人的基础上,写了一个简易的斗地主程序. 主要实现了面向对象设计,洗牌.发牌.判断牌型.比较牌的大小.游戏规则等算法. 通过这个斗地主小项目的练习,提高了我的面向对象设计能力,加深了对算 ...

  4. C#性能优化的一些技巧

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#性能优化的一些技巧.

  5. Java 动态生成 复杂 .doc文件

    阅读目录 1.word 里面调整好排版,包括你想生成的动态部分,还有一些不用生成的规则性的文字 2. 将 word 文档保存为 xml 3.用 Firstobject free XML edito 打 ...

  6. window下 Mongodb无法访问28107的有关问题(转)

    原文链接:http://www.myexception.cn/go/1956868.html Mongodb无法访问28107的问题 0:环境 os:window7 64位 mongodb版本:3.0 ...

  7. Jquery UI 组合树 - ComboTree 集成Wabacus4.1 代码剖析

    Jquery UI 1.3 (组合树 - ComboTree ) 集成Wabacus4.1 集成Spring 代码剖析 使用时,请下载需要Jquery ui包进行配置 combotree.js 的代码 ...

  8. PHP获取当前url路径的函数及服务器变量

    $_SERVER["QUERY_STRING"],$_SERVER["REQUEST_URI"],$_SERVER["SCRIPT_NAME" ...

  9. 读写应用程序数据-SQLite3

    SQLite3是嵌入到ios中的关系型数据库.对存储大规模的数据非常实用,使得不必将每个对象加到内存中. 支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串和文本).BLOB(二进制 ...

  10. Verilog Tips and Interview Questions

    Verilog Interiew Quetions Collection :  What is the difference between $display and $monitor and $wr ...