使用cmake在openwrt中添加工程

本文介绍如何在OpenWrt环境下使用CMake构建自定义项目,包括设置Makefile、CMakeLists.txt文件,以及如何在menuconfig中添加项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,所以非常的方便。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值