如果启用了模块,则tgmath.h不起作用

时间:2014-04-28 05:41:24

标签: ios objective-c macos llvm-clang

我在处理arm64时使用tgmath.h来处理CGFloat typedef float/double混乱。

This answer对如何使用它有很好的描述,除了它对我来说根本不起作用。无论如何,我的代码仍在调用math.h函数。

在花了一些时间查看所有项目编译器设置后,我发现禁用了"模块"功能(@import vs #import - iOS 7)使一切正常。更具体地说,项目设置中的选项在Enable Modules(C and Objective-C)下拉列表中称为Apple LLVM 5.1 - Language - Modules

要查看此问题的快速示例,请下载使用tgmath such as MBProgressHUD的项目,并查看启用模块项目设置时会发生什么。 tgmath.h次来电被math.h次来电取代。

我的问题是:

  1. 为什么模块会阻止tgmath正确导入?

  2. 有没有办法绕过它并同时使用tgmath和模块?我仍然希望能够使用它们。

2 个答案:

答案 0 :(得分:3)

我不确定是什么导致了这个问题,但作为一种解决方法,您至少可以禁用您正在使用tgmath.h的文件的模块:

  • 导航到Xcode中目标的Build Phases选项卡。
  • 在Compile Sources阶段,找到源文件。
  • 双击源文件并在“编译器标志”弹出窗口中键入-fno-modules以禁用该文件的Clang模块。

至少在这种方式下,您仍然可以在大多数项目中获得模块的好处。 (当然,假设您在大多数源文件中不需要tgmath.h。)

答案 1 :(得分:1)

它可能已经在您的数学库中,名称为ctgmath:Link