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@gmail.com> 13# Redistribution and use is allowed according to the terms of the 2-clause BSD license. 14 15 16include(CheckCXXSourceCompiles) 17 18# a little test program for c++ math functions. 19# notice the std:: is required on some platforms such as QNX 20 21set(find_standard_math_library_test_program 22"#include<cmath> 23int main() { std::sin(0.0); std::log(0.0f); }") 24 25# first try compiling/linking the test program without any linker flags 26 27set(CMAKE_REQUIRED_FLAGS "") 28set(CMAKE_REQUIRED_LIBRARIES "") 29CHECK_CXX_SOURCE_COMPILES( 30 "${find_standard_math_library_test_program}" 31 standard_math_library_linked_to_automatically 32) 33 34if(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 40else() 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 64endif() 65