cmake添加宏_cmake⾃动添加宏定义
前⾔
⼀个⼤型的⼯程往往包含很多模块,构建时候可以⾃主选择需要使⽤的模块,这⾥模拟⼀个任务,实现⼀个求指数的模块,⽤户可以在⽂件中⾃由配制是否使⽤该模块,如果使⽤该模块,则需要在config.h配置⽂件中增加相应的宏定义
准备⼯作
创建sample8⼯程,新增Math⽬录,Math.h和Math.cpp⽂件,实现求指数功能,新增main.cpp⽂件,当未引⼊Math模块时使⽤系统求指数函数,否则使⽤Math模块中的求指数函数
⽬录如下:
main.cpp中内如下:
⼯程根⽬录下⽂件内容为:
src下⽂件内容为:
src新增 config.h.in⽂件,内容如下:
进⼊build 开始构建,然后执⾏bin⽬录下的./sample8 2 8 输出:
Now we use our own Math library.
2 ^ 8 is 256
打开 build/src下的config.h⽂件,内容为:
改写前⾯src中的,将option (USE_MYMATH "Use provided math implementation" ON)改成option
(USE_MYMATH "Use provided math implementation" OFF),删除build⽂件夹中内容,然后重新构建后,再执⾏ ./sample8 2 8 输出:
Now we use the standard library.
2 ^ 8 is 256
打开 build/src下的config.h⽂件,内容为:
cmake新增语法解释:
option (USE_MYMATH "Use provided math implementation" ON)指令
给变量赋值 ON,代表真;OFF关键字则代表 假
configure_file( [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
对指定的输⼊⽂件中的内容按照指定的规则进⾏替换,替换完成后输出到output指定的输出路径
替换规则为:
1、在输⼊⽂件中,凡是以${VAR}格式或@VAR@格式出现的地⽅都将⽤CMake中对应变量的值进⾏替换,如上例中VAR变量的值为VAR_NEW,config.h中全部替换成了这个值
2、在输⼊⽂件中,类似于#cmakedefine VAR的定义语句将会被替换为#define VAR或者/* #undef VAR /,如上例中USE_MYMATH 当设定为ON的时候,config.h变成了#define USE_MYMATH,设定为OFF时,变成了/ #undef USE_MYMATH */;同理,类似于
#cmakedefine01 VAR的定义语句将会被替换为#define VAR 1或#define VAR 0。
tips: 如果将中的
@# 是否使⽤⾃⼰的 Math库
option (USE_MYMATH "Use provided math implementation" ON)
@# ⽤于测试替换⽤的变量
set(TEST_ON 1)
set(TEST_OF 0)
set(VAR "VAR_NEW")
这⼀段写到config_file指令的后⾯,会发⽣什么?
只有放到前⾯,config_file指令执⾏时这些变量才是有效的,切莫注意
cmake如何使用
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论