• C语言项目编译


    在《linux-Unix系统编程》一书中,发现作者的源码编译写的非常高明。虽然尚不能完全理解,顺手牵过来分享给大家。

    一、项目结构

    首先,项目的目录结构如下,lib是共享的源文件,fileio是一个模块,fileio的源文件会依赖到lib中的文件,这也是一般项目的结构

    .
    ├── fileio
    │   ├── main
    │   ├── main2
    │   ├── main2.c
    │   ├── main.c
    │   └── makefile
    ├── lib
    │   ├── function.c
    │   ├── function.h
    │   └── Makefile
    ├── libtlpi.a
    ├── Makefile
    └── Makefile.inc

    二、一级目录的Makefile

    一级目录的Makefile是make命令的配置文件,大概是按顺序将所有二级目录进行构建,这里的lib一定要在fileio之前

    DIRS = lib fileio
    
    all:
            for i in $(DIRS); do 
                    (cd $$i && echo "making $$i" && $(MAKE) ) || exit 1; 
            done
    allgen:
            for dir in ${DIRS}; do (cd $${dir}; ${MAKE} allgen) ; done
    
    clean:
            for i in $(DIRS); do 
                    (cd $$i && echo "cleaning $$i" && $(MAKE) clean) || exit 1; 
            done

    一级目录的Makefile.inc是二级目录的Makefile都要引用到的

    TLPI_DIR = ..
    TLPI_LIB = ${TLPI_DIR}/libtlpi.a
    TLPI_INCL_DIR = ${TLPI_DIR}/lib
    
    LINUX_LIBRT = -lrt
    LINUX_LIBDL = -ldl
    LINUX_LIBACL = -lacl
    LINUX_LIBCRYPT = -lcrypt
    LINUX_LIBCAP = -lcap
    
    IMPL_CFLAGS = -std=c99 -D_XOPEN_SOURCE=600 
                    -D_DEFAULT_SOURCE 
                    -g -I${TLPI_INCL_DIR} 
                    -pedantic 
                    -Wall 
                    -W 
                    -Wmissing-prototypes 
                    -Wno-sign-compare 
                    -Wno-unused-parameter
    
    CFLAGS = ${IMPL_CFLAGS}
    
    IMPL_THREAD_FLAGS = -pthread
    
    IMPL_LDLIBS = ${TLPI_LIB} -lm
    
    LDLIBS = ${IMPL_LDLIBS}
    
    RM = rm -f

    三、lib下的Makefile

    include ../Makefile.inc
    allgen : ${TLPI_LIB}
    
    ${TLPI_LIB} : *.c 
            ${CC} -c -g ${CFLAGS} *.c
            ${RM} ${TLPI_LIB}
            ${AR} rs ${TLPI_LIB} *.o
    
    
    clean :
            ${RM} *.o  ${TLPI_LIB}

    四、fileio中的makefile

    include ../Makefile.inc
    
    GEN_EXE = main main2
    
    LINUX_EXE =
    
    EXE = ${GEN_EXE} ${LINUX_EXE}
    
    all : ${EXE}
    
    allgen : ${GEN_EXE}
    
    
    clean :
            ${RM} ${EXE} *.o
    
    showall :
            @ echo ${EXE}
    
    ${EXE} : ${TLPI_LIB}

    其中fileio/main.c,lib/function.h lib/function.c代码都在上一篇文章中,这里就不贴了 

  • 相关阅读:
    经典问题之生产者-消费者问题——Lock实现
    【转】面试中常见的二叉树题目
    【转】ConcurrentHashMap之实现细节
    【转】java中关键字volatile的作用
    WeakReference 与 SoftReference 区别
    git学习笔记
    android项目笔记整理(3)
    android项目笔记整理(2)
    Android项目笔记整理(1)
    Android实习结束后的阶段性总结
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14915425.html
Copyright © 2020-2023  润新知