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系 ...
随机推荐
- HW2.9
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- 把普通的git库变成bare库
$ cd your_repo $ mv .git .. && rm -fr * $ mv ../.git . $ mv .git/* . $ rmdir .git $ git conf ...
- Java时间转换类实现
Java时间类型非常的差,首先版本问题,本人使用java在Android平台开发.很多Data类的方法已经不提倡使用,一个时间,居然要使用Calendar.DateFormat等类共同编码,非常麻烦. ...
- Unity3D问题之EnhanceScollView选择角色3D循环滚动效果实现
需求 呈现3D效果(2D素材)选择角色效果 滚动保证层级.缩放比例.间距正常尾随 循环滚动 这个界面需求一般也会有游戏会採用(貌似有挺多) 怎样实现 实现技术关键点 (3D循环效果,依据数学函数和细致 ...
- logback使用
须要的jar包: slf4j-api-1.7.7.jar logback-classic-1.1.2.jar logback-core-1.1.2.jar logback.xml配置文件,放在proj ...
- jQuery -> 获取/设置/删除DOM元素的属性
jQuery的属性操作很easy,以下以一个a元素来说明属性的获取/设置/删除操作 <body> <a>jquery.com</a> </body> 加 ...
- iOS开发中常见的语句@synthesize obj=obj的意义详解
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- qt QSqlQuery
QT数据库QSqlQuery SQL执行操作 QSqlQuery提供了对数据库记录的Select.Insert.Update.Delete操作. SELECT操作: QSqlQuery query ...
- How to save/read file on different platforms
You can use standard c functions, such as fopen, fwrite, to save and read file on different platform ...
- 【iOS程序启动与运转】- RunLoop个人小结
学习iOS开发一般都是从UI开始的,从只知道从IB拖控件,到知道怎么在方法里写代码,然后会显示什么样的视图,产生什么样的事件,等等.其实程序从启动开始,一直都是按照苹果封装好的代码运行着,暴露的一些属 ...