在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
- 默认情况下,`make`查找名为`Makefile`、`makefile`或`Makefile.config`的文件。 - 用户可以通过指定文件名来使用其他名称的Makefile。 3. **引用其他Makefile**: - 一个Makefile可以包含其他Makefile文件,...
MakefileMakefile
在IT行业中,Linux和Makefile是两个至关重要的概念,尤其对于软件开发和自动化构建过程而言。让我们深入探讨一下这两个主题。 首先,Linux是一种开源的操作系统,它的内核由林纳斯·托瓦兹(Linus Torvalds)创建,...
《跟我一起学makefile》这本书为我们提供了一个深入理解并掌握makefile的绝佳平台。makefile是构建自动化工具,主要用于管理程序编译过程,它能够帮助程序员高效地组织和执行编译任务,尤其在大型项目中,其价值...
在IT行业中,`Makefile` 是一个非常重要的工具,特别是在软件开发领域,它用于自动化编译、链接等构建过程。`Makefile` 提供了一种高效的方法来管理项目中的依赖关系,使得开发者能够通过简单的命令执行复杂的构建...
Makefile编译和链接基础知识 Makefile是 Unix 和 Unix-like 操作系统中一种工具,用于自动编译和链接程序。Makefile 文件中包含了一系列规则,指定了编译和链接的过程。下面将详细介绍 Makefile 的基本概念和使用...
《深入理解Makefile:构建与优化程序流程》 在编程世界中,Makefile是一个不可或缺的工具,它在软件开发过程中扮演着自动化构建和管理项目的角色。尤其在C/C++等需要编译链接的项目中,Makefile使得编译过程更加...
在软件开发过程中,Makefile是自动化构建工具,用于编译、链接和其他构建步骤。当项目变得庞大复杂时,一个单一的Makefile可能不足以管理所有的构建规则。这时,"makefile嵌套"的概念就显得尤为重要。它允许我们将...
一个简单的 C 和 C++ 项目的 makefile,应该可以在 Linux 和 Windows 上使用 Mingw。 它为源文件和头文件使用单独的目录,并递归地查找其中的每个文件,因此您不必自己在 makefile 中为每个文件指定规则。 如何配置 ...
makefile xuexi
本文将深入探讨"makefile框架",以及如何使用简单的Makefile架构来组织C语言项目。 首先,`Makefile`是一个文本文件,包含了规则来告诉`make`程序如何编译和链接源代码。在给定的场景中,项目结构分为两个主要目录...
在编程世界里,Makefile是一个不可或缺的工具,它主要用于自动化构建和管理项目。尤其是在C/C++等需要编译链接的项目中,Makefile扮演着协调编译过程的关键角色。"all"是Makefile中的一个特殊目标,也被称为“伪目标...
**Makefile:构建自动化工具** Makefile是软件构建过程中不可或缺的一部分,它是一个包含了构建规则的文本文件,用于自动化编译、链接以及执行等任务。在Linux和类Unix系统中,`make`命令会读取Makefile,根据其中...
在Unix和类Unix系统中,Makefile文件是用于自动构建和编译程序的关键组件,尤其在大型项目中,它能够大大提高开发效率和便于维护。Makefile的核心作用是管理项目的编译规则,它告诉make程序哪些文件是依赖文件,哪些...
【Makefile】是Linux系统中用于自动化编译和构建项目的配置文件,它定义了一系列规则来指导编译器和链接器如何处理源代码。在Windows环境下,IDE如Visual Studio通常会自动处理这些编译任务,但在Unix和Linux系统中...
本程序的Makefile分为3类: 1. 顶层目录的Makefile 2. 顶层目录的Makefile.build 3. 各级子目录的Makefile 一、各级子目录的Makefile: 它最简单,形式如下: EXTRA_CFLAGS := CFLAGS_file.o := obj...
Makefile 实战详解 Makefile 是一个非常重要的工具,在软件开发过程中扮演着非常关键的角色。Makefile 的主要作用是告诉 make 程序如何将源代码编译成可执行文件。Makefile 的好坏直接影响着项目的开发效率,一个好...
### makefile详解 #### 一、makefile的重要性与作用 在软件开发过程中,makefile扮演着极其重要的角色,尤其在大型项目的构建管理方面。对于Windows程序员来说,由于集成开发环境(IDE)通常提供了完整的项目管理和...
Makefile是Unix/Linux环境下自动化构建工具的核心文件,用于管理和编译多源文件的项目。它定义了目标文件、依赖文件以及如何将依赖文件转化为目标文件的规则。在本例中,我们有一个包含`complicated.c`、`main.c`、`...