• 用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

     

  • 相关阅读:
    abap程序之间调用
    java-response-乱码解决
    java-servlet:response/request
    同平台不允许同时登陆的方案(不同平台可同时登陆)
    @Async 异步http请求,汇总数据处理
    ABAP-VOFM FOR MM-PO PRICE
    ABAP-CDS
    PI-Custom adapter module
    Vue中在移动端如何判断设备是安卓还是ios
    v-show在select中选择bug
  • 原文地址:https://www.cnblogs.com/thoughtInShare/p/14088582.html
Copyright © 2020-2023  润新知