zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU 1201 18岁生日 【日期】
    单点登录cas常见问题(二)
    IntelliJ IDEA 15和Maven创建Java Web项目
    ExpandableListView的使用以及信息的高亮显示
    基于RTP的h.264视频传输系统设计(一)
    RocketMQ 消息队列单机部署及使用
    使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结
    从JVM的角度看JAVA代码--代码优化
    Ajax系列之四:问题总结
    使用css打造形形色色的形状!
  • 原文地址:https://www.cnblogs.com/nancymake/p/5825615.html
Copyright © 2011-2022 走看看