zoukankan      html  css  js  c++  java
  • 关于makefile文件研究

    makefile文件采用依赖倒推的模式进行编译。

    主要由以下几步构成:

    1 申明

    2 default 默认生成的对象

    3 TARGET 链接过程

    4 cpp 编译过程

    5 生成一个version.h文件

    6 一个空force过程

    附上一个测试文件

    .PHONY: default
    SYSNAME=$(shell uname -s)
    ifeq ($(SYSNAME),Darwin)
            ECHO=echo
    else
            ECHO=echo -e
    endif
    CXX = g++
    CFLAGS = -pg -Wall -std=c++0x
    PRO_HOME=~/build-env/build-system
    LDFLAGS = -L $(PRO_HOME)/3rd-soft/lib/
    CLINC = -I $(PRO_HOME)/3rd-soft/include/
    LDLIBS = -ljsoncpp -lsybdb -lgcrypt -lcurl -luuid -lglog -ljsoncpp
    SOURCES = $(wildcard *.cpp ./common/*.cpp)
    OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES))
    TARGET=program_name
    # TODO: 这里加入所有默认需要编译的目标
    default: version.h $(TARGET)
        @echo Generation default ...
    # 链接过程
    ${TARGET}: $(OBJECTS)
        @echo Generation TARGET ...
        $(CXX) $(OBJECTS) $(CLINC) $(LDFLAGS) $(LDLIBS) -o $(TARGET)
        cp -f $(TARGET) ../bin/$(TARGET)
    # 编译过程
    %.o : %.cpp
        @echo Generation cpp ...
        $(CXX) -c $(CFLAGS) $(CLINC) $(LDFLAGS) $(LDLIBS) $< -o $@
    # 下面是每个目标的生成过程
    TEST_PROGRAM_NAME=AS
    TEST_PROGRAM_NAME_CN=模块名简介
    MAIN_VERSION_STRING="1.0.0"
    VERSION_STRING:=$(shell LANG=C git log --oneline -1 2>/dev/null |cut -c1-7)
    version.h: force
        @echo Generation version.h ...
        @$(ECHO) "# ifndef  __TEST_SERVICE_VERSION_H__
    
        # define __TEST_SERVICE_VERSION_H__
    
        # define SERVICE_VERSION_STRING "$(MAIN_VERSION_STRING).$(VERSION_STRING)"
    
        # define TEST_PROGRAM_NAME "$(TEST_PROGRAM_NAME)"
    
        # define TEST_PROGRAM_NAME_CN "$(TEST_PROGRAM_NAME_CN)"
    
        # endif" > version.h
        
    force:
        @echo Generation force ...
    # 程序的生成过程 {{{
    # }}}

    运行以后打印整理如下:

    Generation force ...
    Generation version.h ...
    Generation cpp ...
    Generation targets ...
    Generation default ...

    由此可见,实际运行时程序由下往上,按各自的依赖关系,先执行被依赖的部分。

  • 相关阅读:
    [bzoj]2131: 免费的馅饼
    [bzoj]1098: [POI2007]办公楼biu
    [luogu]P2051 [AHOI2009]中国象棋
    [luogu]P2825 [HEOI2016/TJOI2016]游戏
    MSSQL To MongoDB Tool (FREE)
    虚拟机和Linux安装详解
    Maven
    springmvc的文件上传和下载,框架集成
    json详解以及fastjson使用
    JSP——语法,指令,表达式语言(EL),JSTL标签
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/7943574.html
Copyright © 2011-2022 走看看