• makefile 嵌套


    目录结构:

    dynamic 和 static 两个目录实现加法功能, 分别生成动态库和静态库,   main.c 主文件链接加法功能,  终端命令执行:   make dynamic=1  则编译动态库进行链接 ,   make 静态库编译

    动态库的makefile内容:

    # CROSS_COMPILE := 
    # CC := $(CROSS_COMPILE)gcc
    # CPP := $(CROSS_COMPILE)g++
    
    TARGET := libadd.so
    OBJ := sub.o
    SRCS = $(wildcard *.c)
    
    all:
    	$(CC) -c -o $(OBJ) -fPIC $(SRCS)
    	$(CC) -shared -fPIC -o $(TARGET)  $(OBJ)
    
    
    .PHONY : clean
    clean:
    	rm $(OBJ) $(TARGET) -f
    

     静态库makefile内容:

    # CROSS_COMPILE := 
    # CC := $(CROSS_COMPILE)gcc
    # CPP := $(CROSS_COMPILE)g++
    # AR := $(CROSS_COMPILE)ar
    
    TARGET := libadd.a
    OBJ := sub.o
    SRCS = $(wildcard *.c)
    
    all:
    	$(CC) -c -o $(OBJ)  $(SRCS)
    	$(AR) -rcs -o $(TARGET)  $(OBJ)
    
    
    .PHONY : clean
    clean:
    	rm $(OBJ) $(TARGET) -f
    

      

    根目录的makefile内容:

    CROSS_COMPILE := 
    CC = $(CROSS_COMPILE)gcc
    AR = $(CROSS_COMPILE)AR
    CPP = $(CROSS_COMPILE)g++
    LD = $(CROSS_COMPILE)ld
    NM = $(CROSS_COMILE)nm
    
    STRIP = $(CROSS_COMPILE)strip
    OBJDUMP = $(CROSS_COMPILE)objdump
    OBJCOPY = $(CROSS_COMPILE)objcopy
    
    
    
    ifndef dynamic
    LIBPATH := static
    else
    LIBPATH := dynamic
    endif
    
    
    CFLAGS := -Wall -O2 -g 
    CFLAGS += -I $(shell pwd)/$(LIBPATH) 
    
    LDFLAGS := -lm -L$(LIBPATH) -ladd
    
    
    TOPDIR := $(shell pwd)
    
    SRCS = $(wildcard *.c)
    
    
    TARGET := main
    OBJ := main.o
    
    all:$(TARGET)
    # $(TARGET):    这种方式不会自动推导调用 %.o:%.c 这个内容
    $(TARGET):$(OBJ)
    	make -C $(LIBPATH)
    	$(CC) $(OBJ) $(CFLAGS) $(LDFLAGS) -o $(TARGET)
    #  这样放会出现找不到链接库的问题,源文件要放在链接库前面
    # $(CC)  $(CFLAGS) $(LDFLAGS) -o $(TARGET) $(SRCS)  
    
    %.o:%.c
    	$(CC) -c $(CFLAGS)  $^ -o $@
    
    
    
    # .PHONY是一个伪目标,可以防止在Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突
    .PHONY : clean
    clean:
    	make -C $(LIBPATH) clean
    	rm $(OBJ) $(TARGET) -f
    

      

     源码下载路径: https://download.csdn.net/download/aba13579/10777167

    参考链接: https://blog.csdn.net/qq_21792169/article/details/50448639

  • 相关阅读:
    C#实现Dll(OCX)控件自动注册的两种方法 jason
    C#创建COM对象的方法 jason
    C#怎样判断一个特定的OCX控件是否已注册 jason
    SharePoint2007之安装网站模板 jason
    QQ的clientkey与淘宝旺旺Token 不同平台环境下的登录认证 jason
    C# 程序自动以管理员身份运行 jason
    一步一步配置aspnetdb数据库
    非常实用的常用js
    常用js页面宽度与高度
    一步一步学asp.net_ajax
  • 原文地址:https://www.cnblogs.com/hzijone/p/9940935.html
Copyright © 2020-2023  润新知