为公司的pcie接口FPGA板卡编写上位机软件——Makefile解读

本文介绍了为龙芯mips64架构的FPGA板卡编写上位机软件时,如何理解和使用Makefile进行编译。作者详细解析了Makefile中的编译选项、链接库、源文件路径设置以及目标文件的生成过程,旨在帮助读者掌握Makefile的定制化方法。
摘要由CSDN通过智能技术生成

公司购买了某公司的一块FPGA的板卡,想给这个板卡发送图片,然后得到返回的坐标,再往图片上框出识别到的物体。

驱动已经由供应商给出,编译安装正常,板卡端的软件由同事烧写,所以我的任务是写一个应用软件,给板卡发送数据并读取处理结果。

参考例程为供应商给出的例程2.

主机平台为龙芯,mips64架构

首先看Makefile——这也是自己一直想掌握却没有掌握的知识点

从头部的注释中知道,这个makefile会搜索指定目录下所有的c/c++源文件并进行编译和链接。除了可以编译使用标准的c/c++库的程序之外,使用者还可以添加其他库,即定制化。

使用的是gnu make,如果是其它版本的make则可能无法工作。

使用方法:

1、将Makefile拷贝到指定目录

2、定制化。

修改第一部分的makefile即可,包含编译选项MY_CFLAGS和MY_LIBS,可以看到,这里没有使用特殊的编译选项,但是添加了数学库和线程库MY_LIBS   = $(LIBS) ——LIBS = -lm -lpthread

修改源码目录,此处为src文件夹

定义程序的名称,此处为pcie_image_trd

3、执行make即可启动编译。

make的目标:

make:编译和链接

make NODEP=yes:编译和链接但是不产生依赖文件

make objs:只编译不链接

make tags:

make ctags:                   //这两个应该是配合一些ide使用的

make clean:清除工程和可执行文件

make distclean:清除工程文件、可执行文件和依赖文件

make help:查看帮助

进入到Makefile正文:

1、设置环境

MY_CFLAGS =                                       //未添加自定义的编译选项

LIBS = -lm -lpthread                               //指定链接数学库和线程库

MY_LIBS   = $(LIBS)

CPPFLAGS  = -Wall                               //打开警告信息

LDFLAGS   =                                           //链接选项未设置 

SRCDIRS += ./src                                   //指定源文件路径

PROGRAM   = pcie_image_trd               //指定名称

2、默认的选项

SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp                           //源文件的扩展名类型

HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp                         //头文件的扩展名类型

INCLUDES =  -I ./src                                                                  //指定头文件的保存路径

COMPILE_OPTS = -g $(INCLUDES)                                        //指定c编译选项,可以看到,添加了调试信息

CXXFLAGS= $(COMPILE_OPTS)  -DBSD=1                            //指定c++编译选项,可以看到,添加了调试信息并且定义了一个宏BSD

CC     = gcc

CXX    = g++                                                                               //指定c和c++编译器

ETAGS = etags
ETAGSFLAGS =

CTAGS = ctags
CTAGSFLAGS =                                                                         //这两个变量应该是为其他的代码阅读器生成一些工程文件

3、固定的部分

SHELL   = /bin/sh                                          //指定shell
EMPTY   =
SPACE   = $(EMPTY) $(EMPTY)                 //定义空格,为之后规范化名称使用
 

ifeq ($(PROGRAM),)                                    //如果没有定义工程名称,则使用当前路径信息
  CUR_PATH_NAMES = $(subst /,$(SPACE),$(subst $(SPACE),_,$(CURDIR)))   //定义当前路径名字为:先获得当前路径/home/loongson/FPGA/pcie_image_trd,并使用下划线替换空格,然后使用空格替换反斜杠\最后得到CUR_PATH_NAMES =  home loongson FPGA pcie_image_trd
  PROGRAM = $(word $(words $(CUR_PATH_NAMES)),$(CUR_PATH_NAMES))//指定工程名字为路径中最后一个单词
  ifeq ($(PROGRAM),)                                  //如果这时工程名还是空,那么应该是位于根目录下或者比较怪异的目录下,使用a.out
    PROGRAM = a.out
  endif
endif
ifeq ($(SRCDIRS),)                                      //如果没有定义源文件路径,则默认为当前路径
  SRCDIRS = .

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值