CMake IF 条件返回错误结果
Posted
技术标签:
【中文标题】CMake IF 条件返回错误结果【英文标题】:CMake IF condition returns wrong result 【发布时间】:2018-03-06 15:57:28 【问题描述】:我正在尝试为 android 构建本机库,我需要执行条件编译。所以我的 CMakeLists.txt 文件中有以下代码
#set (TEST_VAL OFF) #uncomment this to force set this value
option(TEST_VAL "Test my value")
if(NOT $TEST_VAL EQUAL OFF)
message(WARNING "TEST MY VAL IS NOT EQUAL OFF ACTUAL VALUE: $DISABLE_SSE ")
else ()
message(WARNING "TEST MY VAL IS ON ACTUAL VALUE: $DISABLE_SSE ")
endif()
如您所见,我正在尝试获取选项值并编译库。
这就是我提供此选项 (build.gradle) 文件的方式。
android
...
defaultConfig
...
externalNativeBuild
cmake
// Passes optional arguments to CMake.
arguments "-DTEST_VAL=OFF"
...
但在我的输出中我只看到:
CMake Warning at CMakeLists.txt:35 (message): TEST MY VAL IS NOT EQUAL OFF ACTUAL VALUE: OFF
那么,OFF 值怎么可能不等于 OFF? 我做错了什么。
非常感谢。
【问题讨论】:
谢谢@john,它实际上是一个有问题的类型。如果我使用 set (TEST_VAL OFF) 显式设置值,主要问题是我有相同的结果 【参考方案1】:EQUAL
运算符是“如果给定的字符串或变量的值是有效数字并且等于右边的数字,则为真。”
所以只需使用if (NOT TEST_VAL)
,因为只要给出变量的名称就是“如果常量为 1、ON、YES、TRUE、Y 或非零数字,则为 true。”
如果您无法更改代码或提出问题...
我已经进行了一些测试,以下确实有效:
set(TEST_VAL OFF)
set(OFF 0)
if(NOT $TEST_VAL EQUAL OFF)
message(STATUS "NOT \$TEST_VAL EQUAL OFF")
endif()
由于EQUAL
需要一个数字进行比较,您可以将字符串OFF
定义为0
。
所以在你的例子中,这相当于arguments "-DTEST_VAL=OFF -DOFF=0"
。
参考
if()
command documentation
【讨论】:
谢谢,但是我不能修改这个库的代码。我只是想弄清楚如何禁用不需要的选项 @SergeyPekar 我们谈论this 图书馆吗?你试过set(TEST_VAL OFF CACHE INTERNAL "")
吗?因为选项是缓存的变量,INTERNAL
会强制该值。
它是专有库,但我尝试编译 that 库,似乎有同样的问题。
@SergeyPekar 好的,EQUAL
检查不适用于字符串。因此,我进行了一些测试并为我的答案添加了解决方案。以上是关于CMake IF 条件返回错误结果的主要内容,如果未能解决你的问题,请参考以下文章