项目构建工具 - CMake (8)常用命令
发布日期:2021-06-29 14:21:09 浏览次数:3 分类:技术文章

本文共 1654 字,大约阅读时间需要 5 分钟。

# 获取该命令所在文件的目录

法一:

get_filename_component(FILE_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH)

法二:

PROJECT_SOURCE_DIR:CMakeLists.txt所在的目录。

PROJECT_BINARY_DIR: 运行cmake时,当前所在的目录。

 

#通配符

file(GLOB LIBS "${BOOST_PATH}/libboost*.a")

#获取源代码文件

aux_source_directory 查找在某个路径下的所有源文件。

例如:

# 查找当前目录下的所有源文件

# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

 

#将CMakeLists中变量值 ,赋值给源码宏定义 (#文件替换)

例如

step1 

CMakeLists.txt中,定义

set (Demo_VERSION_MAJOR 1)

# 加入一个配置头文件,用于处理 CMake 对源码的设置

configure_file (
  "${PROJECT_SOURCE_DIR}/config.h.in"
  "${PROJECT_BINARY_DIR}/config.h"
  )
 

在${PROJECT_SOURCE_DIR}/config.h.in 中,增加

#define Demo_VERSION_MAJOR @Demo_VERSION_MAJOR@

step2:

运行cmake 命令后,

{PROJECT_BINARY_DIR}/config.h中出现

#define Demo_VERSION_MAJOR 1

 

---

configure_file(<input> <output> [COPYONLY] [ESCAPE_QUOTES] [@ONLY])

对指定的输入文件中的内容按照指定的规则进行替换,替换完成后输出到output指定的输出路径

例如:

configure_file (

  "${PROJECT_SOURCE_DIR}/config.h.in"
  "${PROJECT_BINARY_DIR}/config.h"
  )
将config.h.in 转换成config.h

 

其中的转换规则是:

config.h.in中:

#cmakedefine VAR的定义语句将会被替换为#define VAR或者/* #undef VAR */。

例如,#cmakedefine USE_MYMATH

设定为ON,或设置成其他非空任意值时,在config.h变成了   #define USE_MYMATH,

设定为OFF,或设置为空值,或不做任何设置时,在config.h变成了  / *#undef USE_MYMATH */;

 

同理,#cmakedefine01 VAR

设定为ON,或设置成其他非空任意值时,在config.h变成了   #define VAR 1

设定为OFF,或设置为空值,或不做任何设置时,  在config.h变成了 #define VAR 0

 

#option命令 (用于命令行输入cmake命令-D选项)

option(
"描述选项的帮助性文字" [initial value])

示例:

CMakeLists.txt中,option (USE_MYMATH "Use provided math implementation" ON)

控制台执行:cmake .

生成的config.h中,#define USE_MYMATH 1

 

 

控制台执行:cmake . -DUSE_MYMATH=adg (非空,任意值。除OFF,off外)

生成的config.h中,#define USE_MYMATH 1

 

控制台执行:cmake . -DUSE_MYMATH=OFF (或off)

生成的config.h中,#define USE_MYMATH 0

 

 

 

 

 

 

 

 

 

 

转载地址:https://chilaidashi.blog.csdn.net/article/details/107234811 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:UML你是否用的恰当合适(2)-- 常用静态图(deploy component 图)和动态图(activity图)
下一篇:readelf和objdump的区别

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月20日 05时03分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

知乎:硬件和软件哪个吃香? 2019-04-29
中国深圳,600架无人机的盛典! 2019-04-29
干货分享 JVM 之第 3 篇 —— Java 内存结构相关 2019-04-29
干货分享 JVM 之第 4 篇 —— 掌握 Jmeter 压力测试工具,熟悉 Jconsole.exe 工具 2019-04-29
干货分享 JVM 之第 5 篇 —— 类加载器 2019-04-29
干货分享 JVM 之第 6 篇 —— SpringBoot2.0 框架性能调优 2019-04-29
基于 Hystrix 高并发服务限流第 1 篇 —— 必须了解的相关概念 2019-04-29
基于 Hystrix 高并发服务限流第 2 篇 —— 服务隔离(线程池隔离、信号量隔离) 2019-04-29
基于 Hystrix 高并发服务限流第 3 篇 —— 服务熔断、服务降级 2019-04-29
基于 Hystrix 高并发服务限流第 4 篇 —— 基于 Feign 实现服务熔断降级处理 2019-04-29
基于 Hystrix 高并发服务限流第 5 篇 —— Hystrix 监控 2019-04-29
Eureka 如何快速的、优雅的停止某个微服务 2019-04-29
Eureka 实现安全认证 2019-04-29
基于 Hystrix 高并发服务限流第 6 篇 —— 服务限流,基于 RateLimiter 实现 2019-04-29
Nginx 反向代理、负载均衡配置、Location正则表达式 2019-04-29
SpringBoot + WebSocket 实现前后端的收发消息 2019-04-29
SpringBoot 整合 JWT 实现统一认证 2019-04-29
SpringBoot 使用 CompletableFuture 实现非阻塞异步编程 2019-04-29
即刻就业:本科毕业如何快速高薪就业? 2019-04-29
即刻就业:java的应用程序有哪些,java程序有哪些编码规范,开发java应用程序有哪些步骤 2019-04-29