[CMake] Find function that may need libraries?
Matthew Woehlke
mw_triad at users.sourceforge.net
Wed Oct 1 18:42:32 EDT 2008
Is there a standard way to find the library needed for a particular
function, when possibly none is needed? For example, gethostbyname might
be provided in libc, libnsl, libsocket, etc. on various platforms.
I've found myself a couple times now writing a macro to do this, but I
wonder if there is a standard way? If not, would this possibly be a good
module to add?
Here's my most recent incarnation, which piggybacks on the existing
CheckFunctionExists module (borrows its test source). This takes the
name of the variable to receive the required library (may be empty), the
name of the function to look for, and a list of libraries that might
contain the function. It first tries with no additional libraries to see
if the default libraries suffice.
macro(find_library_sym var sym)
message(STATUS "Checking what library is needed for ${sym}")
try_compile(HAVE_${sym} ${CMAKE_BINARY_DIR}
${CMAKE_ROOT}/Modules/CheckFunctionExists.c
COMPILE_DEFINITIONS -DCHECK_FUNCTION_EXISTS=${sym}
)
if(HAVE_${sym})
# No library needed
message(STATUS ""Checking what library is needed for ${sym} -
none")
else(HAVE_${sym})
foreach(lib ${ARGN})
set(CMAKE_REQUIRED_LIBRARIES ${lib})
try_compile(HAVE_${sym} ${CMAKE_BINARY_DIR}
${CMAKE_ROOT}/Modules/CheckFunctionExists.c
COMPILE_DEFINITIONS -DCHECK_FUNCTION_EXISTS=${sym}
CMAKE_FLAGS -DLINK_LIBRARIES:STRING=${lib}
)
if(HAVE_${sym})
message(STATUS ""Checking what library is needed for
${sym} - ${lib}")
set(${var} ${lib})
endif(HAVE_${sym})
endforeach(lib ${ARGN})
set(CMAKE_REQUIRED_LIBRARIES)
endif(HAVE_${sym})
if(NOT HAVE_${sym})
message(FATAL_ERROR ""Checking what library is needed for
${sym} - not found")
endif(NOT HAVE_${sym})
endmacro(find_library_sym)
--
Matthew
Please do not quote my e-mail address unobfuscated in message bodies.
--
This .sig is false
More information about the CMake
mailing list