同步操作将从 工业母机容器操作系统项目/industry_cmake 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
适配ohos轻量构建系统,加入cmake子工程作为组件
系统全局安装CMake工具与Ninja工具
在源码树中包含CMakeLists.txt
文件的文件夹内创建BUILD.gn
与gn构建系统融合,按如下格式创建cmake工程
# //industry/cmake 为本目录在源码树中的路径
import("//industry/cmake/config/cmake.gni")
# 指定构建目标名称,一般与所在文件夹名称相同,从而在其它工程中引用此构建目标时只需要指定文件夹名称(默认扩展为与文件夹相同的名称,如指定gn依赖为 //industry/libxml2,
# 将会自动扩展为 //industry/libxml2:libxml2
# 原生gn构建目标
copy("example_xml_copy") {
sources = ["gjobs.xml"]
outputs = [ "$root_out_dir/data/gjobs.xml" ]
}
cmake_project("libxml2_usage") {
# 可选,指定cmake定义列表,与使用cmake进行指定时格式相同
cmake_defines = [
"-DTEST_DEFINE=OFF"
]
# 可选,指定额外的cflags,也可以通过cmake加入
cflags = [
"-fno-strict-aliasing"
]
# 可选,指定需要依赖的gn构建目标
deps = [
"//industry/libxml2",
":example_xml_copy"
]
}
在构建时,将会调用cmake指令进行配置与构建工作,构建中间目录在out/<platform>/<board>/objs
中
调用CMakeLists脚本时,有以下预定义变量
CMAKE_SYSTEM_NAME
系统名称,定义为liteos_a
CMAKE_INSTALL_RPATH
动态库RPATH,默认为/usr/lib
CMAKE_INSTALL_PREFIX
执行install指令时的默认路径,默认为${OHOS_SYSROOT}/usr
OHOS_SYSROOT
根文件系统路径,对应out/<platform>/<board>
目录
此外以Debug构建时,默认构建类型为Debug;以Release构建时,默认构建类型为RelWithDebInfo
不同CMake工程之间进行引用时,可灵活根据需求决定引用方式
find_package
如果引用的其他工程通过xxx-config.cmake方式安装了cmake文件,则可以通过find_package
指令引入接口库,具体可参照CMake文档
直接引用/链接
由于全局默认头文件和库安装在/usr/include
,/usr/lib
下,且作为默认搜索路径,因此这种情况下可以直接引用头文件并直接以库名作为target_link_libraries
命令参数
通过OHOS_SYSROOT
变量索引
其他情况可通过OHOS_SYSROOT
变量构建具体路径直接引用,注意由于时交叉编译,对于动态库的直接引用尽量使用link_directories
指令与target_link_libraries
组合,需要直接指定库的情况,注意与SONAME相关的问题
需要对gn构建的库进行引用时,需要在cmake_project
中指定deps
项,方法与通常gn指定依赖项相同。同时也需要指定include_dirs
项,同样与通常gn相同。
cmake_project("ethercat_usage") {
# 指定需要使用的头文件目录,对CMake工程全局有效
include_dirs = [
"//industry/igh/include",
"//industry/igh/tools",
]
# 指定需要依赖的项,当需要依赖对应项产生的库文件或头文件时指定
deps = [
"//industry/igh:ethercat_tool"
]
}
在CMakeLists中,直接使用依赖库的名称进行链接(libxyz.so/libxyz.a 使用 xyz 作为名称):
# ethercat_dep为CMake中的executable目标,ethercat_tool为依赖的库的名称
target_link_libraries(ethercat_dep ethercat_tool)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。