`
isiqi
  • 浏览: 16491409 次
  • 性别: 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也就这三种格式,希望对大家有用。

分享到:
评论

相关推荐

    makefilemakefilemakefilemakefile

    makefilemakefilemakefilemakefile

    makefile makefile makefile

    - 默认情况下,`make`查找名为`Makefile`、`makefile`或`Makefile.config`的文件。 - 用户可以通过指定文件名来使用其他名称的Makefile。 3. **引用其他Makefile**: - 一个Makefile可以包含其他Makefile文件,...

    MakefileMakefile

    MakefileMakefile

    linux-makefile

    在IT行业中,Linux和Makefile是两个至关重要的概念,尤其对于软件开发和自动化构建过程而言。让我们深入探讨一下这两个主题。 首先,Linux是一种开源的操作系统,它的内核由林纳斯·托瓦兹(Linus Torvalds)创建,...

    跟我一起学makefile

    《跟我一起学makefile》这本书为我们提供了一个深入理解并掌握makefile的绝佳平台。makefile是构建自动化工具,主要用于管理程序编译过程,它能够帮助程序员高效地组织和执行编译任务,尤其在大型项目中,其价值...

    makefile简单示例

    在IT行业中,`Makefile` 是一个非常重要的工具,特别是在软件开发领域,它用于自动化编译、链接等构建过程。`Makefile` 提供了一种高效的方法来管理项目中的依赖关系,使得开发者能够通过简单的命令执行复杂的构建...

    跟我一起写makefile.pdf

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

    makefile.rar

    《深入理解Makefile:构建与优化程序流程》 在编程世界中,Makefile是一个不可或缺的工具,它在软件开发过程中扮演着自动化构建和管理项目的角色。尤其在C/C++等需要编译链接的项目中,Makefile使得编译过程更加...

    makefile嵌套

    在软件开发过程中,Makefile是自动化构建工具,用于编译、链接和其他构建步骤。当项目变得庞大复杂时,一个单一的Makefile可能不足以管理所有的构建规则。这时,"makefile嵌套"的概念就显得尤为重要。它允许我们将...

    Makefile:C 和 C++ 项目的简单 makefile

    一个简单的 C 和 C++ 项目的 makefile,应该可以在 Linux 和 Windows 上使用 Mingw。 它为源文件和头文件使用单独的目录,并递归地查找其中的每个文件,因此您不必自己在 makefile 中为每个文件指定规则。 如何配置 ...

    makefile xuexi

    makefile xuexi

    makefile框架

    本文将深入探讨"makefile框架",以及如何使用简单的Makefile架构来组织C语言项目。 首先,`Makefile`是一个文本文件,包含了规则来告诉`make`程序如何编译和链接源代码。在给定的场景中,项目结构分为两个主要目录...

    makefile文件中伪目标all的作用以及解析

    在编程世界里,Makefile是一个不可或缺的工具,它主要用于自动化构建和管理项目。尤其是在C/C++等需要编译链接的项目中,Makefile扮演着协调编译过程的关键角色。"all"是Makefile中的一个特殊目标,也被称为“伪目标...

    Makefile:Makefile练习库

    **Makefile:构建自动化工具** Makefile是软件构建过程中不可或缺的一部分,它是一个包含了构建规则的文本文件,用于自动化编译、链接以及执行等任务。在Linux和类Unix系统中,`make`命令会读取Makefile,根据其中...

    Makefile学习

    在Unix和类Unix系统中,Makefile文件是用于自动构建和编译程序的关键组件,尤其在大型项目中,它能够大大提高开发效率和便于维护。Makefile的核心作用是管理项目的编译规则,它告诉make程序哪些文件是依赖文件,哪些...

    MakeFile说明

    【Makefile】是Linux系统中用于自动化编译和构建项目的配置文件,它定义了一系列规则来指导编译器和链接器如何处理源代码。在Windows环境下,IDE如Visual Studio通常会自动处理这些编译任务,但在Unix和Linux系统中...

    韦东山通用Makefile文件

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

    Makefile实战.pdf

    Makefile 实战详解 Makefile 是一个非常重要的工具,在软件开发过程中扮演着非常关键的角色。Makefile 的主要作用是告诉 make 程序如何将源代码编译成可执行文件。Makefile 的好坏直接影响着项目的开发效率,一个好...

    makefile详解

    ### makefile详解 #### 一、makefile的重要性与作用 在软件开发过程中,makefile扮演着极其重要的角色,尤其在大型项目的构建管理方面。对于Windows程序员来说,由于集成开发环境(IDE)通常提供了完整的项目管理和...

    Makefile示例

    Makefile是Unix/Linux环境下自动化构建工具的核心文件,用于管理和编译多源文件的项目。它定义了目标文件、依赖文件以及如何将依赖文件转化为目标文件的规则。在本例中,我们有一个包含`complicated.c`、`main.c`、`...

Global site tag (gtag.js) - Google Analytics