`
isiqi
  • 浏览: 16585637 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

makefile

阅读更多

在linux下面,我们不得不自己写makefile,makefile的确博大精深,但是实际上对于日常的使用来说,无非就是
1:编译可执行程序。2:编译lib库 3:编译so库
本博针对上面三种目的各自写出了makefile模版,希望对大家有所帮助。
一.编译可执行程序
当前目录下制定文件编译成可执行文件(连接外部库的话只需要更改INC和LIB即可)

CXX = g++
TARGET = bitmaploctest
C_FLAGS += - g - Wall
LIB_FLAGS = - pthread
all: $(TARGET)
bitmaploctest: bitmaploctest.o bitmaploc.o file_lock.o
$(CXX) - o $@ $^ $(LIB_FLAGS) $(LIB) $(C_FLAGS)
.cpp.o:
$(CXX) - c - o $* .o $(INC) $(C_FLAGS) $* .cpp
.cc.o:
$(CXX) - c - o $* .o $(INC) $(C_FLAGS) $* .cc
clean:
- rm - f * .o $(TARGET)

二.编译成lib库
当前目录下指定文件编译成lib库(一般lib库在编译的时候不会将使用的外部库编译进来,而是等编译成可执行程序时或者.so时)

INC_DIR= ./
SRC_DIR= ./
OBJ_DIR= ./
LIB_DIR= ./
H_DIR= ./
OBJ_EXT= .o
CXXSRC_EXT= .cpp
CSRC_EXT= .c
LIB_EXT= .a
H_EXT= .h
OBJECTS = $(OBJ_DIR)bitmaploc$(OBJ_EXT) \
$(OBJ_DIR)file_lock$(OBJ_EXT)
LIB_TARGET = $(LIB_DIR)libbitmaploc$(LIB_EXT)
$(OBJ_DIR)% $(OBJ_EXT): $(SRC_DIR)% $(CXXSRC_EXT)
@echo
@echo “Compiling $< == > $@…”
$(CXX) $(INC) $(C_FLAGS) - c $< - o $@
$(OBJ_DIR)% $(OBJ_EXT): $(SRC_DIR)% $(CSRC_EXT)
@echo
@echo “Compiling $< == > $@…”
$(CC) - I./ $(INC) $(C_FLAGS) - c $< - o $@
all: $(LIB_TARGET)
$(LIB_TARGET): $(OBJECTS)
all: $(OBJECTS)
@echo
$(AR) rc $(LIB_TARGET) $(OBJECTS)
@echo “ok”
clean:
rm - f $(LIB_TARGET) $(OBJECTS)

三.编译成so库
当前目录下指定文件编译成so库(必须将所有引用的外部库都编译进来)

CC = gcc
CXX = g++
CFLAGS= - Wall - pipe - DDEBUG - D_NEW_LIC - g - D_GNU_SOURCE - shared - D_REENTRANT
LIB= - lconfig - ldl - lrt - L../ ../ lib - lttc - g
INCLUDE = - I../ spp_inc
OO= service.o tinystr.o tinyxml.o tinyxmlerror.o tinyxmlparser.o uin_conf.o stat.o
TARGETS = ../ ../ lib/ libRanch.so
all: $(TARGETS)
stat: tool_stat.cpp
$(CXX) $(INCLUDE) tool_stat.cpp - o tool_stat stat.o tinystr.o tinyxml.o tinyxmlerror.o tinyxmlparser.o - g
cp tool_stat ../ ../ bin
$(TARGETS): $(OO)
$(CXX) $(CFLAGS) $(INCLUDE) $(OO) - o $@ $(LIBDIR) $(LIB)
.c.o:
$(CC)$(CFLAGS) - c $(INCLUDE) $<
echo $@
.cpp.o:
$(CXX) $(CFLAGS) - c $(INCLUDE) $<
echo $@
% : % .c
$(CC) $(CFLAGS) - o $@ $< $(OO) $(LDFLAGS)
echo $@
clean:
rm - f * .o
rm - f $(TARGETS)
rm - f tool_stat

OK,我常用的makefile也就这三种格式,希望对大家有用。

分享到:
评论

相关推荐

    makefile基础知识.pdf

    "makefile基础知识" Makefile 是一种自动化编译工具,常用于大型开发项目的管理和维护。它可以将复杂的开发项目分解成多个易于管理的模块,並高效地处理源文件之间的复杂关系。 Makefile 的主要功能是描述源程序...

    跟我一起学Makefile.pdf

    跟我一起学Makefile.pdf Makefile是嵌入式工程师开发必备的经典教程,以下是从文件中提取的相关知识点: 1. 关于程序的编译和链接:Makefile的主要作用是自动化编译和链接过程,使得开发者可以更方便地管理项目。 ...

    Makefile 多目录编译Demo

    在编程世界中,Makefile是一个极其重要的工具,它允许开发者自动化构建项目,特别是当项目包含多个目录和大量源代码文件时。"Makefile 多目录编译Demo"着重讲解了如何在复杂的项目结构中有效利用Makefile进行编译。...

    韦东山通用Makefile文件

    本程序的Makefile分为3类: 1. 顶层目录的Makefile 2. 顶层目录的Makefile.build 3. 各级子目录的Makefile 一、各级子目录的Makefile: 它最简单,形式如下: EXTRA_CFLAGS := CFLAGS_file.o := obj...

    跟我一起写Makefile.pdf

    《跟我一起写Makefile》是陈皓大佬撰写的一份PDF文档,主要讲解了如何编写和理解Makefile,以便于管理程序的编译和链接过程。Makefile是软件开发中的一个重要工具,它帮助自动化构建过程,使得编译和链接更加高效。 ...

    跟我一起写makefile.pdf

    Makefile编译和链接基础知识 Makefile是 Unix 和 Unix-like 操作系统中一种工具,用于自动编译和链接程序。Makefile 文件中包含了一系列规则,指定了编译和链接的过程。下面将详细介绍 Makefile 的基本概念和使用...

    Makefile基础知识学习 很好 肯定能学会

    ### Makefile基础知识详解 #### 第一部分:概述 Makefile是一种用于描述如何构建程序或文档的脚本文件。它被广泛应用于软件开发过程中,用来管理项目的编译和链接过程。通过Makefile,开发者可以轻松地组织复杂的...

    跟我一起写Makefile[陈皓]

    make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样...

    codeblocks工程转makefile

    然而,有些情况下,开发者可能希望脱离IDE,直接使用命令行工具如`make`来编译项目,这时就需要将CodeBlocks的工程文件转换为`makefile`。`makefile`是一个文本文件,它包含了构建项目的规则和指令,使得编译过程...

    Makefile手册_中文版.pdf

    Makefile是Linux系统下的一种构建工具,它定义了程序编译和链接的所有规则,使得开发人员能够通过一个简单的命令make来自动构建可执行程序。Makefile手册为读者提供了全面的Makefile使用指南,介绍其语法、编写规则...

    Makefile中文手册.pdf

    在了解Makefile之前,我们首先要明白什么是makefile。Makefile是一种用于程序编译的脚本文件,它描述了整个程序编译和链接的过程,包括哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等编译规则。在...

    跟我一起学Makefile(PDF版)

    《跟我一起学Makefile》是由陈皓撰写,祝冬华整理的一本关于Makefile学习的PDF教程。Makefile是软件构建过程中的重要工具,尤其在C、C++等编程语言中,它能自动化编译、链接等步骤,提高开发效率。这本书主要针对想...

    Makefile自动构建方法

    ### Makefile自动构建方法 #### 一、概述 在Linux平台下,Makefile是一种非常重要的自动化构建工具,它能够帮助开发者高效地管理项目构建过程。本文档将详细介绍如何使用Makefile进行自动构建,并通过一个简单的...

    跟我一起学makefile.pd

    ### 跟我一起学Makefile #### 第一部分:概述 **Makefile**是一种用于自动化构建过程的脚本文件,在软件开发过程中极为常见。通过定义一系列规则和指令,Makefile可以自动化地完成编译、链接等任务,极大地提高了...

    跟我一起写Makefile

    ### 跟我一起写Makefile #### 第一部分:概述 Makefile 是一种用于自动化构建过程的脚本文件,主要用于 Linux 和 Unix 类操作系统中。它能够帮助开发者通过编写一系列指令来自动化编译、链接和安装等操作,极大地...

    Makefile写法及自动化工具

    Makefile是Unix/Linux环境下用于自动化构建、编译和链接程序的重要工具。它允许开发者通过定义一系列规则来指示编译过程,从而极大地简化了大型项目中管理多个源文件的复杂性。在【标题】"Makefile写法及自动化工具...

    Makefile 中文教程.pdf

    Makefile 中文教程.pdf Makefile 作为一个自动化编译工具,在软件开发过程中扮演着非常重要的角色。Makefile 的主要作用是根据源代码文件生成目标文件,实现自动化编译和链接的过程。 Makefile 的基本概念 ...

    Makefile 基础教程.pdf

    Makefile 基础教程 Makefile 是一种特殊格式的文件,用于自动构建和管理项目。在 Unix、Linux 及其版本上运行的程序构建工具,帮助简化可能需要各种模块的构建程序可执行文件。Makefile 中定义的规则和依赖关系指导...

Global site tag (gtag.js) - Google Analytics