zoukankan      html  css  js  c++  java
  • 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 $<
  • 相关阅读:
    独立开发unity2d游戏的问答群
    使用闭包和lambda解决问题与常规方式解决问题的对比。
    说《深渊》
    AS3项目基础框架搭建分享robotlegs2 + starling1.3 + feathers1.1
    ArrayList源码学习
    在springMVC的controller中获取request,response对象的一个方法
    postgresql存储过程
    RabbitMq笔记
    dubbo学习笔记
    修改数据库的最大连接数
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4398734.html
Copyright © 2011-2022 走看看