使用cmake在openwrt中添加工程

1.为什么要使用cmake

此前,笔者的公司之前linux下的工程,很多是使用scons工具进行编译,其优点是编译脚本是使用python编写语法简单,缺点也很多,一是无法像make一样多线程编译(笔者未找到相应方法,如果有,请赐教),二是像无法添加到openwrt工程中;使用cmake的好处很多,其CMakeLists.txt文件编写也很简单,支持make -j多线程编译,也可以将自己的工程添加到openwrt中,对笔者来说,QtCreator也支持cmake,更是方便。

2.在openwrt的menuconfig中添加自有工程

首先,要在openwrt的目录下创建你的工程的目录,如:

mkdir -p package/my_company/my_project

并在此目录下,创建Makefile文件,及src目录和files目录。 其中Makefile文件的内容如下:

include $(TOPDIR)/rules.mk

PKG_NAME:=my_project
PKG_VERSION:=2016-11-22
PKG_RELEASE=1

PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=

PKG_MAINTAINER:=cairui <cairui1989@foxmail.com>

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk #如果使用cmake,则必须增加此行

define Package/my_project
  SECTION:=net
  CATEGORY:=my_company
  DEPENDS:=+kmod-tun +libpthread +librt +libubox +libuci +libstdcpp #添加所需的依赖库,不添加,则会编译报错
  TITLE:=orayboxvpn from makefile
endef

define Build/Prepare
        mkdir -p $(PKG_BUILD_DIR)
        $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Package/orayboxvpn/description
        my_project by cairui from cmake in 20161122
endef

define Package/orayboxvpn/install
        $(INSTALL_DIR) $(1)/sbin
        $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/my_projext $(1)/sbin/
        $(INSTALL_BIN) ./files/config/* $(1)/etc/my_projext 
endef

$(eval $(call BuildPackage,my_project))

根据上述的Makefile文件可看出,src目录下放入源代码及CMakeLists文件,files目录下放入配置文件等。 需要注意的是,由于我们 的工程使用cmake来编译,所以需要include $(INCLUDE_DIR)/cmake.mk,此时menuconfig会将src目录下的CMakeLists.txt文件拷贝到build_dir/targetxxxx/my_project目录下,切自动执行cmake命令,生成Makefile文件。

3.CMakeLists.txt文件需要注意的地方

CMakeLists.txt文件我们之前在用来交叉编译的时候,会set(CMAKE_C_COMPILER ...)来指定交叉编译工具,然而在这里,并不需要指定,因为查看openwrt中的include/cmake.mk文件中可以发现,在openwrt中make的时候,cmake会传入交叉编译工具的路径,即openwrt编译出来的gcc的路径,且还会传入一些其他的宏,具体可查看cmake.mk文件。

4.编译自己的工程

当完成了上述的操作之后,便可以很方便的编译自己的工程了,使用make package/my_company/my_project/compile V=s命令,就可以编译出,且会在bin/里生成相应的ipk文件。 make的时候,会发现,openwrt首先会编译依赖的选项,然后再编译my_project,所以非常的方便。

weinxin
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
Igor
  • 版权声明: 发表于 2020-07-2920:49:35
  • 转载注明:http://blog.tsingmac.com/prolions/creators/openwrt/3920/
Openwrt:web中文语言支持,并设置默认中文 Openwrt

Openwrt:web中文语言支持,并设置默认中文

一、概述 openwrt 源码最开始是只支持英文的,所以需要自己配置添加中文显示,有两种方式可以实现web 中文界面显示: ① 直接编译进固件,并设置默认中文; ② 在串口终端在线更新中文包,并在we...
高性价比AC2600路由D-Link DIR-882 Openwrt

高性价比AC2600路由D-Link DIR-882

近年来,面对可连网终端设备的不断暴增以及国内宽带的提速升级,无线路由器迎来了新的更新换代潮。然而对于一般消费者来说,似乎还无法从产品外观上直接感受到路由器产品的迭代与演进。而《拆机实验室》是一档带您深...
D-Link DIR878拆机,AC1900无线路由器 Openwrt

D-Link DIR878拆机,AC1900无线路由器

之前拆过一台D-Link的DIR882之后,有朋友在公众号留言说,有一台DIR878跟它硬件一样的,除了USB口,而且第三方固件通刷。最近DIR882都不在300内了,而看见了DIR878降到299,...
OpenWrt 常用命令 - Swack Openwrt

OpenWrt 常用命令 – Swack

OpenWrt 常用命令。 文件类、目录类命令 md5sum 计算文件的md5值 cd change directory cat 文件内容输出到终端 文件太长可以使用 vi/vim,或者 cat dh...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: