SET(VAR HAVE_VISIBILITY) IF(NOT DEFINED ${VAR}) SET(SOURCE "void __attribute__((visibility(\"default\"))) test() {} #ifdef __INTEL_COMPILER #error ICC breaks with binutils and visibility #endif int main(){} ") FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/src.c" "${SOURCE}") MESSAGE(STATUS "Performing Test ${VAR}") TRY_COMPILE(${VAR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/CMakeTmp/src.c CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=-fvisibility=hidden" OUTPUT_VARIABLE OUTPUT) WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeOutput.log "Performing manual C SOURCE FILE Test ${VAR} with the following output:\n" "${OUTPUT}\n" "Source file was:\n${SOURCE}\n" APPEND) SET(${VAR} ${${VAR}} CACHE INTERNAL "Test Visibility") IF(${VAR}) MESSAGE(STATUS "Performing Test ${VAR} - Success") ELSE(${VAR}) MESSAGE(STATUS "Performing Test ${VAR} - Failed") ENDIF(${VAR}) ENDIF(NOT DEFINED ${VAR}) IF(${VAR}) ADD_DEFINITIONS(-fvisibility=hidden) ADD_DEFINITIONS(-DHAVE_GCC_VISIBILITY) ENDIF(${VAR})