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 $<
  • 相关阅读:
    【Linux高频命令专题(24)】grep
    【PSR规范专题(6)】PSR-7 HTTP消息接口【转】
    【redis专题(10)】KEY设计原则与技巧
    【redis专题(9)】事务
    【redis专题(8)】命令语法介绍之通用KEY
    linux 之 jq
    PHP Rabbitmq 报错Broken pipe
    Laravel 跨框架队列交互
    解决Linux下编译.sh文件报错 unexpected operator Syntax error: word unexpected
    安装QConf 报错及解决方案
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4398734.html
Copyright © 2011-2022 走看看