makefile文件解释

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

makefile文件解释

makefile文件

CC = g++

PROGRAM = ubuntuopengl

SRC = $(wildcard ./*.cpp)

OBJECTS = $(patsubst %.cpp,%.o,$(SRC))

LIBS = -lX11 -lGL -lGLEW

%.o: %.cpp
 $(CC) $(LIBS) -c -o $@ $< 

$(PROGRAM): $(OBJECTS)
 $(CC) -o $@ $(OBJECTS) $(LIBS)
 
clean:
 -rm -f $(PROGRAM)
 -rm -f $(OBJECTS)

详细解释

目标通常是要产生的文件的名称它可以是可执行文件OBJ文件也可是一个执行的动作名称如‘clean’。
依赖用来输入从而产生目标的文件一个目标经常有几个依赖。
命令Make执行的动作一个规则可以含有几个命令每个命令占一行。
注意每个命令行前面必须是一个Tab字符即命令行第一个字符是Tab。
指令

$(var)

$(var) 变量引用

CC = g++

CCmakefile隐含变量默认选择gcc编译器这边使用g++

PROGRAM = ubuntuopengl

PROGRAM = ubuntuopengl 给最后输出文件起别名

SRC = $(wildcard ./*.cpp)

SRC = $(wildcard ./*.cpp) 获取工作目录下的所有的.cpp文件列表

OBJECTS = $ (patsubst %.cpp,%.o,$(SRC))

$ (patsubst 原模式 目标模式 文件列表) 在$ (patsubst %.c,%.o,$ (SRC) )中patsubst把$(SRC)中的变量符合后缀是.cpp的全部替换成.o

LIBS = -lX11 -lGL -lGLEW

LIBS = -lX11 -lGL -lGLEW 库文件

%.o: %.cpp
$(CC) $(LIBS) -c -o $@ $<

静态模式 生成链接文件

解释什么是静态模式

objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
等同于
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o : bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o

试想如果我们的%.o有几百个那种我们只要用这种很简单的“静态模式规则”就可以写完一堆规则实在是太有效率了

$(PROGRAM): $(OBJECTS)
$(CC) -o $@ $(OBJECTS) $(LIBS)

链接库文件生成可执行文件

clean:
-rm -f $(PROGRAM)
-rm -f $(OBJECTS)

清理可执行文件和生成的.o文件

此外常用的一些指令

CFLAGS

CFLAGS指定头文件(.h)的路径 如CFLAGS=-I /usr/include -I /path/include

LDFLAGS

LDFLAGS指定库文件的路径 如LDFLAGS=-L /usr/lib -L /path/to/your/lib

LIBS

LIBS告诉链接器要链接哪些库文件。如LIBS = -lx11 -lGL -lGLEW, -l代表所链接的库文件

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6