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

### 回答1: 可以使用cmake-gui工具,在Qt添加asio库:首先打开cmake-gui,然后添加asio源文件路径,然后添加asio库路径,最后点击“Configure”和“Generate”按钮,即可完成添加asio库的步骤。 ### 回答2: 在Qt使用CMake添加ASIO库,可以按照以下步骤进行: 1. 首先,确保已经安装了ASIO库。可以从官方网站(https://think-async.com/Asio/)下载ASIO库,并进行安装。 2. 打开Qt创建一个新的C++项目。 3. 在项目目录创建一个名为"CMakeLists.txt"的文件。 4. 在"CMakeLists.txt"文件添加以下内容: ``` cmake_minimum_required(VERSION 3.5) project(MyProject) set(CMAKE_CXX_STANDARD 11) add_executable(MyProject main.cpp) target_link_libraries(MyProject asio) ``` 5. 将ASIO库的路径添加CMake。在上述代码,`target_link_libraries`行后面添加以下内容: ``` target_include_directories(MyProject PRIVATE /path/to/asio/headers) ``` 将“/path/to/asio/headers”替换为ASIO库的实际路径。 6. 保存并关闭"CMakeLists.txt"文件。 7. 在Qt的"项目"视图,右键单击项目文件夹,然后选择"重新加载CMake项目"。 8. 在Qt的"项目"视图,右键单击项目文件夹,然后选择"构建项目"。 9. 构建成功后,使用Qt的"运行"按钮运行项目。 通过上述步骤,你就可以在Qt使用CMake添加使用ASIO库了。请注意,确保配置正确的ASIO库路径以及正确的CMake和Qt版本,以避免可能遇到的问题。 ### 回答3: 在Qt使用CMake添加Asio库需要以下步骤: 1. 首先,确保你的Qt项目目录包含了CMakeLists.txt文件。如果没有,请新建一个。 2. 在CMakeLists.txt文件的开头,添加以下内容,以指定CMake的最低版本和项目名称: ``` cmake_minimum_required(VERSION 3.5) project(YourProjectName) ``` 3. 在CMakeLists.txt文件添加以下内容来引入Qt的相关模块: ``` find_package(Qt5 COMPONENTS Core Network REQUIRED) ``` 4. 添加Asio库的路径,可以是相对路径或绝对路径。比如,如果Asio库的源代码位于项目目录的"third_party/asio"文件夹下,添加以下内容: ``` add_subdirectory(third_party/asio) ``` 5. 在CMakeLists.txt文件添加以下内容,来设置与Asio库的链接选项,同时链接Qt模块: ``` target_link_libraries(YourProjectName PRIVATE Qt5::Core Qt5::Network asio) ``` 6. 最后,在你的Qt项目使用CMake来构建项目。打开终端,切换到项目目录,执行以下指令: ``` mkdir build cd build cmake .. make ``` 这将会生成你的Qt应用程序,并自动链接Asio库。你可以通过运行生成的可执行文件来启动应用程序。 这样,你就成功地在Qt使用CMake添加了Asio库。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值