CMake-4:生成器表达式【简化cmake的多版本配置语法】【编译期间动态改变代码】

#301cmake_exp/CMakeLists.txt
cmake_minimum_required (VERSION 3.20)
project (cmake_exp)
add_executable(cmake_exp cmake_exp.cpp)
#[[
逻辑运算符
$<BOOL:string>  
                转换string为0或1。评估0以下任何一项是否为真:
                string是空的,
                string是不区分大小写的等于 0, FALSE, OFF, N, NO, IGNORE, or NOTFOUND, or
                string以后缀结尾-NOTFOUND(区分大小写)。
                否则计算为1。
$<NOT:condition> 取反 0变1 1变0
$<AND:conditions>
$<OR:conditions>

条件表达式
$<condition:true_string>  0返回空串 1 返回true_string
]]  # $<BOOL:OFF>  ==》 0   $<0:TEST1=123>
target_compile_definitions(cmake_exp PUBLIC "$<$<BOOL:ON>:TEST1=123>")

#######################################
#### 测试生成表达式的方式 ###############
### 利用cmake的错误来查看  
# $<AND:1,0>"  
#target_include_directories(cmake_exp PUBLIC "$<AND:1,0>")
#target_include_directories(cmake_exp PUBLIC "$<OR:0,0>")
#set(LIB OFF)
# LIB等于OFF时显示STATIC ON显示空
#target_include_directories(cmake_exp PUBLIC "$<$<NOT:$<BOOL:${LIB}>>:STATIC>")
#在配置阶段不处理生成表达式
#message($<$<NOT:$<BOOL:${LIB}>>:STATIC>)


### 生成一个自定义目标
#cmake生成表达式调试方法(官方)
# cmake -E echo "生成表达式"
#add_custom_target(gen COMMAND ${CMAKE_COMMAND} -E echo "$<$<NOT:$<BOOL:${LIB}>>:STATIC=1>")


# 字符串比较
# $<STREQUAL:string1,string2>
# $<EQUAL:value1,value2>
#target_include_directories(cmake_exp PUBLIC "$<STREQUAL:string1,string1>")
#target_include_directories(cmake_exp PUBLIC "$<EQUAL:123,1>")

# 变量查询
# $<CONFIG:cfgs>
# $<CONFIG> Debug Release 。。
#target_include_directories(cmake_exp PUBLIC "$<CONFIG>")
#$<CONFIG:Debug,Release>配置项式Debug,Release之一返回1
#target_include_directories(cmake_exp PUBLIC "$<CONFIG:Debug,Release>")

# $<PLATFORM_ID:platform_ids> 系统名称  Windows Linux
message("CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
#target_include_directories(cmake_exp PUBLIC "$<PLATFORM_ID:Windows,Linux>")

#$<IF:condition,true_string,false_string>
#set(LIB ON)
#target_include_directories(cmake_exp PUBLIC "$<IF:$<BOOL:${LIB}>,ON_STRING,OFF_STRING>")

set (conf  "Debug")
#set(exp "$<STREQUAL:$<LOWER_CASE:${conf}>,debug>")

#目标相关查询
#生成目标的全路径
#set(exp "$<TARGET_FILE:cmake_exp>")

# 获取目标的属性
#set(exp "$<TARGET_PROPERTY:cmake_exp,NAME>")
#target_include_directories(cmake_exp PUBLIC ${exp})
add_custom_target(gen COMMAND ${CMAKE_COMMAND} -E echo "${exp}")

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要创建一个cmake-demo项目的入门教程,首先需要在根目录下创建一个名为CMakeLists.txt的文件,并创建一个名为hello的子目录。可以使用以下命令完成这些操作:mkdir cmake-demo && cd cmake-demo touch CMakeLists.txt mkdir hello 。 然后,在CMakeLists.txt文件中编写CMake命令来配置项目。CMake脚本文件由一系列CMake命令组成,通常以.cmake作为后缀名。你可以使用cmake命令来配置项目,例如:cmake -D <var>=<value> [options] <path/to/source> 。 最后,你可以在hello目录下添加源代码文件,例如一个简单的hello.cpp文件,然后使用CMake来生成构建系统的文件,例如Makefile或Visual Studio的项目文件。运行cmake命令来生成构建系统文件,然后使用构建系统来构建项目。 请注意,这只是一个简单的cmake-demo入门教程的概述,实际上还有很多更详细的内容可以涉及。你可以参考cmake的文档来获取更多的信息,例如使用cmake --help或man cmake命令来查看文档。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [CMake构建工具使用教程](https://blog.csdn.net/zzy979481894/article/details/129109513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值