CMake结构控制

判断

if常规判断

使用 if 进行条件判断,与其他语言差不多,同样也存在判断,else/elseif

测试代码:

#版本要求,如若没有此句代码,可能会发生错误
cmake_minimum_required(VERSION 3.2) 

#空的工程
project(test NONE)

######################################################
#直接测试YES/NO
message("   直接测试YES/NO:")
if (YES)
  message("Condition 1")
endif()

if (NO)
  message("Condition 2")
endif()

######################################################
#设置变量测试
message("\n   变量测试YES/NO:")
set(A "YES")
set(B "NO")

if (A)
  message("Condition 3")
endif()

if (B)
  message("Condition 4")
endif()

######################################################
#if/else组合
set(C "TRUE")
set(D "FALSE")
message("\n   if/else组合:")
if (C)
  message("Condition 5")
else()
  message("Condition 6")
endif()

if (D)
  message("Condition 7")
else()
  message("Condition 8")
endif()

######################################################
#elseif判断
set(E "OFF")
set(F "ON")

message("\n   if/elseif组合:")
if (E)
  message("Condition 9")
elseif(F)
  message("Condition 10")
else()  
  message("Condition 11")
endif()

######################################################
#if/elseif/else组合
set(G "0")
set(H "0")
message("\n   if/elseif/else组合:")
if (G)
  message("Condition 12")
elseif(H)
  message("Condition 13")
else()
  message("Condition 14")
endif()

输出

   直接测试YES/NO:
Condition 1

   变量测试YES/NO:
Condition 3

   if/else组合:
Condition 5
Condition 8

   if/elseif组合:
Condition 10

   if/elseif/else组合:
Condition 14
-- Configuring done
-- Generating done

增加命令判断

接受其他的命令参数,可进行变量或者字符串判断

使用:判断字符串是否为空

set(A "")
if (A STREQUAL "")
  message("(direct)Value of A is an empty string")
endif()

测试代码:

#版本要求,如若没有此句代码,可能会发生错误
cmake_minimum_required(VERSION 3.2) 

#空的工程
project(test NONE)

######################################################
#判断一个变量是否为空字符串
message("   判断一个变量是否为空字符串:")
set(A "")
if (A STREQUAL "")
  message("(direct)Value of A is an empty string")
endif()

######################################################
#使用一个变量储存另一个变量名字,从而间接判断
message("\n   使用一个变量储存另一个变量名字,从而间接判断:") 
set(B "A")
# if ("${B}" STREQUAL "") #CMP0054 CMake3.1之前与下面形式相等。
if (${B} STREQUAL "")
  message("(indirect)Value of ${B} is an empty string")
endif()

######################################################
#若像上面那样保存另一个变量的名字,那么具体的数值取决于上下文。
message("\n   若像上面那样保存另一个变量的名字,那么具体的数值取决于上下文:")
set("Jane foo" "")
set(C "Jane foo")
message("C=${C}")
if(${C} STREQUAL "")
  message("C is empty")
else()
message("C is not empty,C=${C}")
endif()

######################################################
#由于CMake接受变量的任何名称,
#因此您无法通过添加“保留”符号从<variable | string>中过滤出<variable>:
message("\n   无法添加Filter:") 
set("No Filter" "")
set("xNo Filter" "x")
set("!No Filter" "!")
set(" No Filter" " ")

set(D "No Filter")
message("D is ${D}")

#CMP0054policy下,会打印其中的内容。CMake3.1之后不会。
if ("x${D}" STREQUAL "x")
  message("x{D} is \"x\"")
endif()

if ("!${D}" STREQUAL "!")
  message("!{D} is \"!\"")
endif()

if (" ${D}" STREQUAL "x")
  message(" {D} is \" \"")
endif()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值