【CMake 入门与进阶(7)】 CMakeLists.txt 部分常用变量-续(附使用代码)

15 篇文章 10 订阅

        继续来学习CMakeLists.txt 常用变量

描述系统的变量

        顾名思义,这些变量描述了系统相关的一些信息:

变量说明
CMAKE_HOST_SYSTEM_NAME运行 cmake 的操作系统的名称(其实就是 uname -s)
CMAKE_HOST_SYSTEM_PROCESSOR运行 cmake 的操作系统的处理器名称(uname -p)
CMAKE_HOST_SYSTEM运行 cmake 的操作系统(复合信息)
CMAKE_HOST_SYSTEM_VERSION运行 cmake 的操作系统的版本号(uname -r)
CMAKE_HOST_UNIX如果运行 cmake 的操作系统是 UNIX 和类 UNIX,则该变量为 true,否则是空值
CMAKE_HOST_WIN32如果运行 cmake 的操作系统是 Windows,则该变量为 true,否则是空值
CMAKE_SYSTEM_NAME目标主机操作系统的名称
CMAKE_SYSTEM_PROCESSOR目标主机的处理器名称
CMAKE_SYSTEM目标主机的操作系统(复合信息)
CMAKE_SYSTEM_VERSION目标主机操作系统的版本号
ENV用于访问环境变量
UNIX与 CMAKE_HOST_UNIX 等价
WIN32与 CMAKE_HOST_WIN32 等价
  • CMAKE_HOST_SYSTEM_NAME、CMAKE_HOST_SYSTEM_PROCESSOR 、 CMAKE_HOST_SYSTEM 和 CMAKE_HOST_SYSTEM_VERSION

        这四个变量描述的是运行 cmake 的主机相关的信息,我们直接打印出来看看即可:

# 打印信息
message(${CMAKE_HOST_SYSTEM_NAME})
message(${CMAKE_HOST_SYSTEM_PROCESSOR})
message(${CMAKE_HOST_SYSTEM})
message(${CMAKE_HOST_SYSTEM_VERSION})

        对应的打印信息如下:

         大家自己对照一看就知道了,笔者就不再多说了。

  • CMAKE_SYSTEM_NAME 、 CMAKE_SYSTEM_PROCESSOR 、 CMAKE_SYSTEM 和 CMAKE_SYSTEM_VERSION

        这 4 个变量则是用于描述目标主机相关的信息,目标主机指的是可执行文件运行的主机,譬如我们的 ARM 开发板。

# 打印信息
message(${CMAKE_SYSTEM_NAME})
message(${CMAKE_SYSTEM_PROCESSOR})
message(${CMAKE_SYSTEM})
message(${CMAKE_SYSTEM_VERSION})

        cmake 打印信息如下:

         因为我们并没有对 cmake 配置交叉编译,默认会使用 Ubuntu 系统(运行 cmake 的主机)本身的编译工具,所以生成的目标文件(可执行文件或库文件)只能运行在 Ubuntu 系统中,所以这 4 个变量记录的依然是 Ubuntu 主机的信息。

  • ENV

        这个变量可用于访问环境变量,用法很简单$ENV{VAR}

# 访问环境变量
message($ENV{XXX})

        通过$ENV{XXX}访问 XXX 环境变量,我们来测试一下,首先在 Ubuntu 系统下使用 export 命令导出 XXX 环境变量:

export XXX="Hello World!"
cd build/
cmake ..

        打印信息如下所示:

         从打印信息可知,ENV 变量确实可以访问到 Linux 系统的环境变量。

控制编译的变量

        这些变量可以控制编译过程,具体如下所示:

变量说明
EXECUTABLE_OUTPUT_PATH可执行程序的输出路径
LIBRARY_OUTPUT_PATH库文件的输出路径

        这两个变量前面我们已经用到过了,分别用来设置可执行文件的输出目录以及库文件的输出目录,接下来我们进行简单地测试。 譬如工程目录结构如下所示:

├── build
├── CMakeLists.txt
├── hello
│ ├── hello.c
│ └── hello.h
└── main.c

        hello.c 会被编译成动态库文件 libhello.so,而 main.c 会被编译成可执行程序,main.c 源码中调用了 hello.c 提供的函数;顶层 CMakeLists.txt 文件内容如下所示:

# CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project(HELLO VERSION 1.1.0) #设置工程版本号为 1.1.0

# 设置可执行文件和库文件输出路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

# 头文件包含
include_directories(hello)

# 动态库目标
add_library(hello SHARED hello/hello.c)

# 可执行程序目标
add_executable(main main.c)
target_link_libraries(main PRIVATE hello) #链接库

        进入到build目录下,执行cmake、make进行构建、编译,最终会生成可执行文件main和库文件libhello.so, 目录结构如下所示:

├── build
│ ├── bin
│ │ └── main
│ ├── lib
│ └── libhello.so
├── CMakeLists.txt
├── hello
│ ├── hello.c
│ └── hello.h
└── main.c

        这是因为我们通过设置 EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 才会使得生成的可执行程序在 build/bin 目录下、生成的库文件在 build/lib 目录下,如果把这两行给注释掉,那么生成的文件在 build 目录中,因为默认情况下,最终的目标文件的输出目录就是源码的 BINARY_DIR。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值