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

     

  • 相关阅读:
    openSUSE 13.1 Milestone 4 发布
    Neo4j 2.0 M4 发布
    iBoxDB for .NET v1.5发布, 移动NoSQL数据库
    GNU libc (Glibc) 2.18 发布
    Android 开源项目维护者宣布退出
    Jeasyframe 开源框架 稳定版 V1.5 发布
    Spring Mobile 1.1.0.RC1 和 1.0.2 发布
    Deis logo 开源PaaS系统 Deis
    EasyCriteria 3.0 发布
    TypeScript 0.9.1 发布,新增 typeof 关键字
  • 原文地址:https://www.cnblogs.com/thoughtInShare/p/14088582.html
Copyright © 2011-2022 走看看