• Makfile文件编写


    一、make是什么

    GNU make是一个工程管理器,专门负责管理、维护较多文件的处理,实现自动化编译。如果一个工程项目中,有成百上千个代码源文件,若其中一个或多个文件进过修改,make就需要能够自动识别更新了的代码,不需要像方法1一样逐个输入编译冗长的命令行,就可以完成最后的编译工作。make执行时,自动寻找makefile(Makefile)文件,然后执行编译工作。因此,我们需要自己编写makefile文件(Makefile与makefile都可以直接被make命令识别,下同。但Linux区分大小写)来管理、维护工程文件,提高实际项目的工作效率。

    二、适用什么情况

    1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
    2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程。
    3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

    三、主要过程
     1.设置编译环境 set compile environment
     2.获取要编译的源文件,以及把源文件转换为目标文件 ( 源文件和目标文件) source to obj
     3.将文件编译为目标文件 OBJing
     4.将目标文件链接成可执行文件或(打包为)动态库,或静态库  linking
     5.其他方面 clean等

    四、示例

    ## 设置编译环境
    CC:=gcc
    CXX:=g++
    BIN:= libdemo.so
    FLAGS := -Wall -g -fPIC
    CXX_FLAGS := -Wall -g -pipe -fPIC -shared -export-dynamic
    LIB := -L../common/test/ -ltest
    INCLUDE_PATH := -I/common/ -I../common/test/

    ## 获取要编译的源文件,以及把源文件转换为目标文件
    SOURCES := $(wildcard *.c *.cpp)
    OBJS := $(patsubst %.c, %.o, $(patsubst %.cpp,%.o,$(SOURCES)) )

    ## 将源文件编译为目标文件
    %.o: %.c
    $(CC) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH)

    %.o:%.cpp
    $(CXX) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH)

    ## 将目标文件链接成可执行文件或动态库,或静态库
    $(BIN) : $(OBJS)
    $(CXX) $(CXX_FLAGS) $(OBJS) $(INCLUDE_PATH) $(LIB) -o $(BIN)
    chmod a+x $(BIN)

    ## 其他
    clean:
    rm -rf *.o $(BIN)

    install:
    cp $(BIN) ../common/bin

  • 相关阅读:
    第一次作业
    第一次作业
    第一次作业
    第一次作业
    随笔初谈
    第一次作业
    第一次作业
    第一次班级作业
    C语言感想---第一次作业
    C语言入门
  • 原文地址:https://www.cnblogs.com/nancymake/p/5825615.html
Copyright © 2020-2023  润新知