Linux下书写一个简单的makefile

在Linux下我们经常需要“编译”,而谈起编译就离不开 makefile 了,简单来说 makefile 是编译的一个引导文件,关于它的详细介绍网上有许多资料,这里只为介绍如何书写一个简单的 makefile 。

SOURCES = 
INCLUDE = 
LIBS = 
OBJECTS = $(SOURCES:.cpp=.o)

TARGET = 

$(TARGET) : $(OBJECTS)
        g++ -o $(TARGET) $(OBJECTS) $(INCLUDE) $(LIBS)
$(OBJECTS) : $(SOURCES)
        g++ -c $(SOURCES)

clean:
        rm $(OBJECTS) $(TARGET)

SOURCES: 我们需要参与进编译的源码文件,如.c、.cpp......

INCLUDE: 外部包含的头文件,如果在当前文件夹下,则不用添加

LIBS: 编译涉及到的库

OBJECTS: 编译产生的目标文件,也就是.o文件,我们可以把编译用到的源文件名加上后缀.o,如 a.o b.o......我们看到上面使用了 $(SOURCES:.cpp=.o),这其实相当一个命令,把源文件的 .cpp后缀改为 .o

TARGET: 就是生成可执行文件的名字

$(TARGET) : $(OBJECTS): 对编译好的文件进行连接以生成可执行文件,连接时要将头文件、库添加进来

$(OBJECTS) : $(SOURCES): 对源文件进行编译

clean: 清除编译产生的目标文件和可执行文件

上面我们的编译器使用的是 g++,根据需要也可修改为 gcc或者其他编译器。

下面提供一个编译Opencv常用的 makefile 文件

扫描二维码关注公众号,回复: 3050106 查看本文章
SOURCES = main.cpp
INCLUDE = $(shell pkg-config --cflags opencv)
LIBS = $(shell pkg-config --libs opencv)
OBJECTS = $(SOURCES:.cpp=.o)

TARGET = XXX

$(TARGET) : $(OBJECTS)
        g++ -o $(TARGET) $(OBJECTS) $(INCLUDE) $(LIBS)

$(OBJECTS) : $(SOURCES)
        g++ -c $(SOURCES)

clean:
        rm $(OBJECTS) $(TARGET)

猜你喜欢

转载自blog.csdn.net/qq_25556149/article/details/79498034