cmake检查Mac OS X,使用APPLE还是$ {APPLE}

Ying Xiong

我想检查我是否在Mac OS X中,并具有以下代码

cmake_minimum_required (VERSION 3.0)
project (test)
set (FOO 1)
if (${FOO} AND ${APPLE})
  message ("MAC OS X")
endif ()

在非OSX系统上失败,并显示错误消息

CMake Error at CMakeLists.txt:4 (if):
  if given arguments:

    "1" "AND"

  Unknown arguments specified

如果我替换${APPLE}APPLE,错误就消失了。但是我对此有些疑惑。我们何时应使用引用变量,${VAR}何时不引用

提前致谢。

天花

简而言之:if括号内的所有内容均作为表达式求值,这就是if关键字的语义因此,如果放置APPLE在此处,它将被评估为变量名并产生正确的结果。

现在,如果您放在${APPLE}那里,${} if评估表达式之前先评估其内容因此,就如同您写的一样

if (1 AND )

(在APPLE未设置变量的情况下,在非OSX系统上就是这种情况)。这是无效的语法,并产生您得到的错误。您应该写:

if (FOO AND APPLE)

引用CMake文档

if命令是在CMake的历史中很早就编写的,它早于$ {}变量评估语法,并且为了方便起见,评估了由其参数命名的变量,如上面的签名所示。请注意,在if命令甚至接收到参数之前,使用$ {}进行普通变量评估。因此,代码如下:

set(var1 OFF)
set(var2 "var1")
if(${var2})

在if命令中显示为:

if(var1)

并根据上述if()情况进行评估。结果为OFF,这是错误的。但是,如果我们从示例中删除$ {},则该命令将看到:

if(var2)

这是正确的,因为var2被定义为“ var1”,这不是一个假常量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Virtual Box内的Apple Mac OS X小牛

应用程序使用的是Apple的Java 6,而不是Mac OS X上的Oracle的Java 7?

Apple / Mac OS X-是否有像Linux这样的软件包管理器

为什么Mac App Store中的OS X 10.9.2更新比Apple网站中的更新小?

如何使用Apple的Core Audio C API在OS X上创建简单的实时I / O流?

我可以在任何Apple计算机上安装以开发人员身份签名的Mac OS X应用程序吗?

Apple Mac OS可以作为Xamarin.iOS的构建主机在Windows的虚拟机上运行吗?

在OS X上运行ProGuard:与rt.jar等效的Apple在哪里?

通过SSH将服务器安装到Apple OS X.11上的Finder中

需要有关Apple OS X的替代JVM的指导

在没有CD / DVD或Apple ID的情况下重新安装OS X

Bash是Apple OS X系统更新的一部分吗?

使用适用于Mac Catalyst Apple Silicon的xcodebuild构建

如何在Mac上使用Apple Push Notification?

无法在Mac中打开Apple Configurator

Apple Mac-O链接器错误

如何检查是否安装了Apple Maps

检查iPhone是否与Apple Watch配对?

在Mac OS X上将Python3与CMake链接

使用Apple Watch的iAd

如何使ExpressCard 34 USB3在Apple Mac OS X 10.10 / 10.11 +上运行(通过以下一种或多种方法:kexts,签名或选择兼容的型号/芯片组)?

在Mac OS X中使用“默认写入”时,首选“是/否”还是“真/假”?还是根本没有关系?

OS X 10.9 Developer Preview 7更新后,新的13英寸Apple MacBook Air上的键盘表现异常

Apple API,用于检查某个Apple ID是否购买了iOS应用程序

如何为Mac Catalyst / x86_64-apple-ios-macabi构建文件?

如何在Windows和CMake上使用Visual Studio编译Mac OS X的C ++

如何在Mac OS X上使CMake使用GCC而不是Clang?

如何在Apple JS中使用“使用Apple登录”

使用Apple Android实施登录

TOP 榜单

热门标签

归档