cmake 命令

最近在编写 cmake 现在把if 命令遇到的问题总到这里

1、if(NOT TARGET XX)

官方文档

if(TARGET target-name)
True if the given name is an existing logical target name such as those created by the add_executable(), add_library(), or add_custom_target() commands.

判断 target-name 是否存在。 target-name 主要是通过 add_executable(), add_library(), or add_custom_target() 这3个命令执行输出的目标。

2、if(COMMAND command-name)

if(COMMAND command-name)
True if the given name is a command, macro or function that can be invoked.

判断 宏或者函数等可以调用

3、get_filename_component

官方文档:

get_filename_component
Get a specific component of a full filename.

get_filename_component(<VAR> <FileName> <COMP> [CACHE])
Set <VAR> to a component of <FileName>, where <COMP> is one of:

DIRECTORY = Directory without file name
NAME      = File name without directory
EXT       = File name longest extension (.b.c from d/a.b.c)
NAME_WE   = File name without directory or longest extension
ABSOLUTE  = Full path to file
REALPATH  = Full path to existing file with symlinks resolved
PATH      = Legacy alias for DIRECTORY (use for CMake <= 2.8.11)
Paths are returned with forward slashes and have no trailing slahes. The longest file extension is always considered. If the optional CACHE argument is specified, the result variable is added to the cache.

get_filename_component(<VAR> FileName
                       PROGRAM [PROGRAM_ARGS <ARG_VAR>]
                       [CACHE])
The program in FileName will be found in the system search path or left as a full path. If PROGRAM_ARGS is present with PROGRAM, then any command-line arguments present in the FileName string are split from the program name and stored in <ARG_VAR>. This is used to separate a program name from its arguments in a command line string.

获取组件 的信息存到
信息类型包含一下:
DIRECTORY = 不包含文件名的目录
NAME = 不包含目录的文件名
ABSOLUTE = 绝对路径,包含文件名
REALPATH = 软连接的文件的绝对路径
PATH = DIRECTORY 的旧名字。结果等同 DIRECTORY。在 cmake <=2.8.11 版本.

4、在find_package 中给目标添加属性

1、添加目标
add_library(obj STATIC IMPORTED)

  • 首先这个 add_library 不会构建obj。
  • 这个操作的目的就是导出 obj

2、给目标设置属性
使用set_target_properties 设置obj属性值。
官方文档

set_target_properties(target1 target2 ...
                      PROPERTIES prop1 value1
                      prop2 value2 ...)

target1 target2 … 是目标
PROPERTIES 设置属性关键字
prop1 存储属性的变量
value1 属性值。

例子


```bash
set_target_properties(obj PROPERTIES  test "test___")

3、获取属性数据
1、get_property
官方文档

```bash
get_property(<variable>
             <GLOBAL             |
              DIRECTORY [<dir>]  |
              TARGET    <target> |
              SOURCE    <source>
                        [DIRECTORY <dir> | TARGET_DIRECTORY <target>] |
              INSTALL   <file>   |
              TEST      <test>   |
              CACHE     <entry>  |
              VARIABLE           >
             PROPERTY <name>
             [SET | DEFINED | BRIEF_DOCS | FULL_DOCS])
需要指定参数

例子:

get_property(var TARGET obj PROPERTY test)
# 将会将 obj 的 test 属性值 存到变量 var 中

2、get_target_property
官方文档

get_target_property(<VAR> target property)
不需要指定参数,因为这个是针对的。

例子:

get_target_property(var obj test)
# 效果和 get_property(var TARGET obj PROPERTY test) 一样
### CMake 命令基本用法 CMake 是一种跨平台构建工具,用于管理软件项目的构建过程。以下是关于 `cmake` 的一些常见命令及其用途: #### 构建项目的基础流程 在指定的源码目录下运行以下命令可以初始化并配置构建环境: ```bash cmake .. ``` 此命令会在当前工作目录下的父级目录寻找 `CMakeLists.txt` 文件,并基于该文件生成相应的构建系统文件[^1]。 #### 查看已安装的 CMake 版本 为了确认系统的 CMake 安装状态以及其版本号,可使用如下命令: ```bash cmake --version ``` 这会返回类似于 `cmake version 3.22.1` 这样的输出结果[^2]。 #### 自定义模块路径设置 如果需要引入自定义模块,则可以在 `CMakeLists.txt` 中通过修改变量来扩展默认查找范围。具体操作方法为向列表追加新的搜索位置: ```cmake list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules/) ``` 这里假设用户的模块存储于 `${PROJECT_SOURCE_DIR}/cmake/Modules/` 路径之下[^3]。 #### 配置特定选项参数化脚本调用实例 对于某些复杂场景可能涉及多目标交叉编译等情况时,可以通过传递额外标志完成定制化的处理逻辑实现灵活控制行为模式比如下面这个例子展示了如何针对不同硬件架构启用 GPU 加速支持同时调整优化级别至调试模式: ```bash ./buildnativeoperations.sh blas -c cuda -cc YOUR_DEVICE_ARCH -b debug ``` 其中 `-c cuda` 表明采用 CUDA 技术栈作为计算后端;而 `-cc YOUR_DEVICE_ARCH` 则指定了适配的目标设备微体系结构代号[-4]。 --- ### 解决问题指南 当遇到错误提示或者功能异常的时候可以从以下几个方面入手排查原因分析解决办法: 1. **验证输入参数合法性**: 确认所提供的各项开关名称拼写无误且符合官方文档规定. 2. **检查依赖关系满足度**: 对应组件是否存在缺失现象, 是否已经正确加载相应库文件. 3. **审查日志记录详尽程度**: 提高消息等级以便获取更多上下文线索辅助定位根源所在. 最后提醒开发者务必保持最新稳定发行版同步更新频率从而享受持续改进带来的便利体验.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值