Tgmath.h не работает, если модули включены
Я рассмотрел использование tgmath.h
для борьбы с беспорядком CGFloat typedef float/double
при работе с arm64.
Этот ответ содержит довольно хорошее описание того, как его использовать, за исключением того, что для меня это вообще не сработало. Независимо от того, мой код все еще вызывал функции math.h
.
Проведя некоторое время, глядя на все параметры компилятора проекта, я обнаружил, что отключение функции "Модули" (@import vs #import - iOS 7) делает все это работает. Более конкретно, параметр в настройках проекта называется Enable Modules(C and Objective-C)
в раскрывающемся списке Apple LLVM 5.1 - Language - Modules
.
Чтобы увидеть быстрый пример этой проблемы, загрузите проект, который использует tgmath, например MBProgressHUD, и посмотрите, что произойдет, когда вы включите настройка проекта модулей. Замены tgmath.h
заменяются регулярными вызовами math.h
.
Мой вопрос:
-
Почему модули не позволяют правильно импортировать tgmath?
-
Есть ли способ обойти это и использовать как tgmath, так и модули? Я бы все еще мог их использовать.
Ответы
Ответ 1
Я не уверен, что вызывает проблему, но в качестве обходного пути вы могли бы по крайней мере отключить модули только для файлов, в которых вы используете tgmath.h
:
- Перейдите на вкладку "Сборка фаз" в Xcode.
- На этапе "Источники компиляции" найдите исходные файлы.
- Дважды щелкните исходный файл и введите
-fno-modules
во всплывающем списке компиляторов, чтобы отключить модули Clang для этого файла.
По крайней мере, вы все равно получите преимущества модулей в большинстве своих проектов. (Это предполагает, конечно, что вам не нужно tgmath.h
в большинстве ваших исходных файлов.)
Ответ 2
Возможно, он уже находится в вашей математической библиотеке под именем ctgmath: Ссылка