使用cmake在openwrt中添加工程

Igor Openwrt评论18,287字数 1817阅读6分3秒阅读模式

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
  • 本文由 Igor 发表于 2020-07-2920:49:35
Openwrt

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

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

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证