1 # - Try to find how to link to the standard math library, if anything at all is needed to do. 2 # On most platforms this is automatic, but for example it's not automatic on QNX. 3 # 4 # Once done this will define 5 # 6 # STANDARD_MATH_LIBRARY_FOUND - we found how to successfully link to the standard math library 7 # STANDARD_MATH_LIBRARY - the name of the standard library that one has to link to. 8 # -- this will be left empty if it's automatic (most platforms). 9 # -- this will be set to "m" on platforms where one must explicitly 10 # pass the "-lm" linker flag. 11 # 12 # Copyright (c) 2010 Benoit Jacob <jacob.benoit.1 (a] gmail.com> 13 # Redistribution and use is allowed according to the terms of the 2-clause BSD license. 14 15 16 include(CheckCXXSourceCompiles) 17 18 # a little test program for c++ math functions. 19 # notice the std:: is required on some platforms such as QNX 20 21 set(find_standard_math_library_test_program 22 "#include<cmath> 23 int main() { std::sin(0.0); std::log(0.0f); }") 24 25 # first try compiling/linking the test program without any linker flags 26 27 set(CMAKE_REQUIRED_FLAGS "") 28 set(CMAKE_REQUIRED_LIBRARIES "") 29 CHECK_CXX_SOURCE_COMPILES( 30 "${find_standard_math_library_test_program}" 31 standard_math_library_linked_to_automatically 32 ) 33 34 if(standard_math_library_linked_to_automatically) 35 36 # the test program linked successfully without any linker flag. 37 set(STANDARD_MATH_LIBRARY "") 38 set(STANDARD_MATH_LIBRARY_FOUND TRUE) 39 40 else() 41 42 # the test program did not link successfully without any linker flag. 43 # This is a very uncommon case that so far we only saw on QNX. The next try is the 44 # standard name 'm' for the standard math library. 45 46 set(CMAKE_REQUIRED_LIBRARIES "m") 47 CHECK_CXX_SOURCE_COMPILES( 48 "${find_standard_math_library_test_program}" 49 standard_math_library_linked_to_as_m) 50 51 if(standard_math_library_linked_to_as_m) 52 53 # the test program linked successfully when linking to the 'm' library 54 set(STANDARD_MATH_LIBRARY "m") 55 set(STANDARD_MATH_LIBRARY_FOUND TRUE) 56 57 else() 58 59 # the test program still doesn't link successfully 60 set(STANDARD_MATH_LIBRARY_FOUND FALSE) 61 62 endif() 63 64 endif() 65