(一)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. POJ-3678 Katu Puzzle 2sat

    题目链接:http://poj.org/problem?id=3678 分别对and,or,xor推出相对应的逻辑关系: 逻辑关系 1 0  A and B     A'->A,B'->B ...

  2. CSS3最简洁的轮播图

    <!DOCTYPE html> <html> <head> <title>CSS3最简洁的轮播图</title> <style> ...

  3. Java 随机生成中文姓名,手机号,邮编,住址

    package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @auth ...

  4. tomcat热部署,更改java类不用重新加载context

    修改类后,tomcat热部署会重新加载整个项目的context,影响开发效率.网上查的大多数是将server的modules标签中Auto Reload项改为Disabled,但是没有效果. 使用以下 ...

  5. RSS实例文档

    <?xml version="1.0" encoding="ISO-8859-1" ?> <rss version="2.0&quo ...

  6. Android SDK Manager无法更新问题解决

    有时候在网络不好的情况下,android sdk manager更新可能一直报错.原因跟国内对于google相关服务的访问受限有关系,需要设置代理访问. 最近也遇到了这个问题.解决方法如下. 启动An ...

  7. [Whole Web] [Node.js, PM2] Controlling runaway apps using pm2

    shows how to enable features in your pm2 config file that allow you to prevent runaway apps from bri ...

  8. textLayout_1.0.0.595.swz

    使用ai制作的矢量素材,导出到flash里面.生成swf时.有的时候会多一个textLayout_1.0.0.595.swz的文件. 这会导致导出的swf无法加载使用.会显示不出来. 解决办法是: 检 ...

  9. 移动Web开发图片自适应两种常见情况解决方案

    本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

  10. GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD)

    每一个APP都会用到APP引导页,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了,当然这里讲的不是APP引导页的美化而是APP引导页的高度集成,一行代码搞 ...