linux下makefile文件编写

在linux环境下编译项目时,我们可能会连接很多头文件和动态库。这会给我们造成很多的麻烦。这时我们使用makefile文件会极大地简便我们项目的编译过程。下面是一些步骤。

1.创建makefile文件

 vi makefile

2.编辑makefile文件,样例如下

LIBS:=hcnetsdk AudioRender
LIB_DIRS:=./Bin  ./lib
includePath=./include
main:main.o
	g++ -o main main.o $(addprefix -L,$(LIB_DIRS)) $(addprefix -l,$(LIBS))

main.o:main.cpp
	g++ -c main.cpp -I$(includePath)
.PHONY:clean

clean:
	rm -rf *.o main

其中LIBS是项目链接的具体动态库,我们将hcnetsdk AudioRender这两个动态库名称赋值给这个值。
LIB_DIRS是上面动态库的具体目录,我们将./Bin ./lib这两个目录赋给这个值;
includePath是项目的头文件名。

下面就是具体的编译过程,比较基础,main是我们的目标文件名,由mian.o目标文件连接动态库生成。
mian.o由main.cpp生成。

3.用到的函数

3.1 addprefix

addprefix是GNU Make中的一个函数,用于将指定的前缀加到一个或多个字符串中的每个元素。它的语法如下:

$(addprefix PREFIX, NAMES...)

其中,PREFIX是要添加的前缀,NAMES…是一个或多个待添加前缀的字符串。
addprefix函数会将PREFIX添加到NAMES…中的每个元素之前,并返回结果。例如:

NAMES := file1 file2 file3
new_names := $(addprefix prefix_, $(NAMES))

在上述示例中,NAMES是一个包含三个字符串的变量,new_names是使用addprefix函数将前缀prefix_添加到每个元素之前的结果。new_names将会是prefix_file1 prefix_file2 prefix_file3。
在关联动态库的示例中,addprefix函数用来将-L和-l前缀加到每个库文件路径和库名称之前,以便正确指定库文件的路径和名称。

3.2 .PHONY:clean

.PHONY是一个特殊的目标(伪目标),在Makefile中使用它可以指定一些不对应实际文件的操作或标记某个目标为伪目标而避免与同名文件冲突。
在例子中,.PHONY: clean表示clean是一个伪目标。通常,clean是被用来执行清理操作,例如删除临时文件、清空编译生成的文件等。方便起见,可以像下面这样定义clean目标:

.PHONY: clean
clean:
    rm -f *.o myapp

在上面的示例中,clean目标通过执行rm -f命令来删除所有的.o文件和myapp文件。
由于.PHONY目标不与实际的文件关联,所以即使存在同名的文件或目录,使用make clean命令时也能够正常执行清理操作,而不会被当作一个构建目标处理。

你可能感兴趣的:(linux,算法,c++)