CheckCXXSourceCompiles.cmake 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #
  2. # Check if the source code provided in the SOURCE argument compiles.
  3. #
  4. # CHECK_CXX_SOURCE_COMPILES - macro which checks if the source code compiles\
  5. # SOURCE - source code to try to compile
  6. # VARIABLE - variable to store size if the type exists.
  7. #
  8. # Checks the following optional VARIABLES (not arguments)
  9. # CMAKE_REQUIRED_LIBRARIES - Link to extra libraries
  10. # CMAKE_REQUIRED_FLAGS - Extra flags to C compiler
  11. #
  12. MACRO(CHECK_CXX_SOURCE_COMPILES SOURCE VAR)
  13. IF("${VAR}" MATCHES "^${VAR}$")
  14. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  15. "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
  16. IF(CMAKE_REQUIRED_LIBRARIES)
  17. SET(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES
  18. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  19. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  20. IF(CMAKE_REQUIRED_INCLUDES)
  21. SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES
  22. "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
  23. ENDIF(CMAKE_REQUIRED_INCLUDES)
  24. FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/src.c"
  25. "${SOURCE}")
  26. MESSAGE(STATUS "Performing Test ${VAR}")
  27. TRY_COMPILE(${VAR}
  28. ${CMAKE_BINARY_DIR}
  29. ${CMAKE_BINARY_DIR}/CMakeTmp/src.cxx
  30. CMAKE_FLAGS
  31. "${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}"
  32. "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
  33. OUTPUT_VARIABLE OUTPUT)
  34. IF(${VAR})
  35. SET(${VAR} 1 CACHE INTERNAL "Test ${FUNCTION}")
  36. MESSAGE(STATUS "Performing Test ${VAR} - Success")
  37. WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeOutput.log
  38. "Performing C++ SOURCE FILE Test ${VAR} succeded with the following output:\n"
  39. "${OUTPUT}\n"
  40. "Source file was:\n${SOURCE}\n" APPEND)
  41. ELSE(${VAR})
  42. MESSAGE(STATUS "Performing Test ${VAR} - Failed")
  43. SET(${VAR} "" CACHE INTERNAL "Test ${FUNCTION}")
  44. WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log
  45. "Performing C++ SOURCE FILE Test ${VAR} failed with the following output:\n"
  46. "${OUTPUT}\n"
  47. "Source file was:\n${SOURCE}\n" APPEND)
  48. ENDIF(${VAR})
  49. ENDIF("${VAR}" MATCHES "^${VAR}$")
  50. ENDMACRO(CHECK_CXX_SOURCE_COMPILES)