zoukankan      html  css  js  c++  java
  • 用makefile编译生成.a文件(linux静态库),并编译进可执行文件中

    本文转载自 https://blog.csdn.net/aflyeaglenku/article/details/47779941

    文件列表:

    代码文件

    /*以下内容保存为“minus.c”*/

    #include "my_math.h"
    
    int my_minus(int x, int y)
    {
    return x - y;
    }

    /*以下内容保存为“minus.c”*/

    #include "my_math.h"
    
    int my_plus(int x, int y)
    {
    return x+y;
    }

    /*以下内容保存为“lib_test.c”*/

    #include "my_math.h"
    
    int main()
    {
        printf("[my_plus ] = %d
    ",my_plus(8,8));    
        printf("[my_minus ] = %d
    ",my_minus(8,8));    
    }

    makefile文件

    /*以下内容保存为“lib.mak”*/

    SHELL = /bin/sh  
    CC = gcc
    AR = ar  
    
    CFLAG = -O2 -W -Wall  
    
    INCLUDE_PATH = -I.  
    LIB_TARGET = ./libmath.a  
    PLUS_OBJ = plus.o  
    PLUS_SRC = ./plus.c 
    
    MIN_OBJ = minus.o 
    MIN_SRC = ./minus.c
    
    all : $(LIB_TARGET)  
    $(PLUS_OBJ): $(PLUS_SRC)  
        $(CC) $(CFLAG) $(INCLUDE_PATH) -c $(PLUS_SRC)  
    
    $(MIN_OBJ): $(MIN_SRC)  
        $(CC) $(CFLAG) $(INCLUDE_PATH) -c $(MIN_SRC)  
    
    $(LIB_TARGET) : $(PLUS_OBJ)  $(MIN_OBJ)
        $(AR) cq $@ $^  
    
        rm -f $(PLUS_OBJ)
        rm -f $(MIN_OBJ)
    
    clean:  
        rm -f $(PLUS_OBJ)
        rm -f $(LIB_TARGET)

     notes:

    $@ --代表目标文件(target)

    $^ --代表所有的依赖文件(components)

    $< --代表第一个依赖文件(components中最左边的那个)。

    $? --代表当前目标所依赖的文件列表中比当前目标文件还要新的文件。

    $* --不包括后缀名的当前依赖文件的名字

    /*以下内容保存为“app.mak”*/

    SHELL = /bin/sh  
    CC = gcc
    
    INCLUDE_PATH = -I.  
    TEST_TARGET = ./test  
    TEST_SRC = ./lib_test.c  
    LDFLAGS := ./libmath.a  
    all :
        $(CC) -g $(TEST_SRC) $(LDFLAGS) -o $(TEST_TARGET) $(INCLUDE_PATH)  
    
    clean:
        rm -f $(TEST_TARGET)

     notes:

    -g 可执行程序包含调试信息
    -o 指定输出文件名
    -c 只编译不链接

    编译生成静态库文件

    make -f lib.mak

    编译生成可执行文件

    make -f app.mak

     

  • 相关阅读:
    解决“Kali Linux终端打不开”
    国内网站备案。备案的是域名?还是服务器?
    Linux磁盘分区
    Linux各目录的作用
    vim基础操作
    基础算法-->堆排序
    期望,方差,标准差,正态分布
    平面向量
    基础算法 ---> 二分法
    学习人工智能准备了解的算法
  • 原文地址:https://www.cnblogs.com/thoughtInShare/p/14088582.html
Copyright © 2011-2022 走看看