1 Star 0 Fork 2

孙武 / industry_cmake

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

cmake component for industrial container

适配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.txt相关

调用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构建系统中的库

需要对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)

空文件

简介

cmake subsystem for ohos build 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/sunwugitee/industry_cmake.git
git@gitee.com:sunwugitee/industry_cmake.git
sunwugitee
industry_cmake
industry_cmake
master

搜索帮助