When I try to compile an Objective C++ file (.mm) that is linked to a file that uses the new @import directive, I get some errors. Currently, my only solution is to replace
Edit: According to the latest docs this should work now.
See this. You have to use the -fcxx-modules
flag instead of the -fmodules
flag, but as the official documentation suggests - EXPERIMENTAL and VERY BROKEN
. I didn't manage to get it working at all... In my opinion it's better to stick with #import
and #include
until that feature is out of experimental
stage.
From clang.llvm.org:
-fcxx-modules
Enable the modules feature for C++ (EXPERIMENTAL and VERY BROKEN).
In my case I needed to use OpenCV in my application.
I have solved this problem by adding
-fcxx-modules
(Objective C++) manually to "Other C++ Flags"
(Build Settings/ Apple Clang - Custom Compiler Flags/ Other C++ Flags)
or
-fmodules
(Objective C) to "Other C Flags"
(Build Settings/ Apple Clang - Custom Compiler Flags/ Other C Flags)
And also I needed to put import the opencv.hpp
before any Apple's headers to fix errors of Expected identifier in opencv library.
For example in Prefix.pch
I organized it that way:
#ifdef __cplusplus
#include <opencv2/opencv.hpp>
#endif
#import <Availability.h>
I am using: