Cmake compile error when include cmath header
Asked Answered
J

2

6

Here is my code:

#include <iostream>
#include <cmath>

int main() {
    std::cout << std::sqrt(4) << std::endl;
    return 0;
}

MAC OS 10.15, CMake 3.15.4

As long as the header file cmath.h is included, CMake compile error.

Execute command:

cmake --build /Users/xxx/Documents/Playground/test1/cmake-build-debug --target test1 -- -j 4

Got following errors:

/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build /Users/xxx/Documents/Playground/test/cmake-build-debug --target test -- -j 4
Scanning dependencies of target test
[ 50%] Building CXX object CMakeFiles/test.dir/main.cpp.o
In file included from /Users/xxx/Documents/Playground/test/main.cpp:2:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:314:9: error: no member named 'signbit' in the global namespace
using ::signbit;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:315:9: error: no member named 'fpclassify' in the global namespace
using ::fpclassify;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:316:9: error: no member named 'isfinite' in the global namespace; did you mean 'finite'?
using ::isfinite;
~~^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h:749:12: note: 'finite' declared here
extern int finite(double)
^
In file included from /Users/xxx/Documents/Playground/test/main.cpp:2:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:317:9: error: no member named 'isinf' in the global namespace
using ::isinf;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:318:9: error: no member named 'isnan' in the global namespace
using ::isnan;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:319:9: error: no member named 'isnormal' in the global namespace
using ::isnormal;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:320:7: error: no member named 'isgreater' in the global namespace; did you mean '::std::greater'?
using ::isgreater;
^~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:728:29: note: '::std::greater' declared here
struct _LIBCPP_TEMPLATE_VIS greater : binary_function<_Tp, _Tp, bool>
^
In file included from /Users/xxx/Documents/Playground/test/main.cpp:2:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:321:7: error: no member named 'isgreaterequal' in the global namespace; did you mean '::std::greater_equal'?
using ::isgreaterequal;
^~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:757:29: note: '::std::greater_equal' declared here
struct _LIBCPP_TEMPLATE_VIS greater_equal : binary_function<_Tp, _Tp, bool>
^
In file included from /Users/xxx/Documents/Playground/test/main.cpp:2:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:322:9: error: no member named 'isless' in the global namespace
using ::isless;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:323:9: error: no member named 'islessequal' in the global namespace
using ::islessequal;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:324:9: error: no member named 'islessgreater' in the global namespace
using ::islessgreater;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:325:9: error: no member named 'isunordered' in the global namespace
using ::isunordered;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:326:9: error: no member named 'isunordered' in the global namespace
using ::isunordered;
~~^
13 errors generated.
gmake[3]: *** [CMakeFiles/test.dir/build.make:63: CMakeFiles/test.dir/main.cpp.o] Error 1
gmake[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/test.dir/all] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/test.dir/rule] Error 2
gmake: *** [Makefile:118: test] Error 2

Same code compiled successfully with XCode. CMake works fine if remove the include of header file cmath. However I need to use functions in cmath and that cannot be workaround.

Jointer answered 22/10, 2019 at 6:48 Comment(3)
These are not CMake errors, they are compiler errors.Globin
There is one solution here, although I doubt removing XCode is acceptable for you. This issue may be caused by having XCode installed while attempting to use CLion tools on the same machine.Globin
There are some updates for this question at thetechawesomeness.ideasmatter.info/… for configurations.Roll
S
3

I also had the same issue on macOS Catalina 10.15, while trying to install a discrete-event network simulator for Internet systems (ns-3)

Apparently, I had a bunch of weird symlinks in my /usr/local/include folder.

  • I deleted everything in /usr/local/include/ and
  • reinstalled Homebrew $ brew upgrade

and everything went back to normal again.

Sorcerer answered 23/4, 2020 at 18:31 Comment(1)
This answer helped me. However, I would suggest not deleting the whole /usr/local/include directory. For my problem, it turned out to be a new package I installed through brew that includes header files that conflict with existing header files and macOS's clang somehow chose to use the new header files.Impatient
J
2

This issue was caused by adding the following line into my .profile

#export CPLUS_INCLUDE_PATH="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include"

Comment out this line then c++ compile with no errors.

It seem I added this line to fix wchar.h file not found error in MAC OS 10.14. However the causes of wchar.h not found is not clear now and maybe related to some configuration issue, not the OS.

Jointer answered 24/10, 2019 at 4:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.