Hello, I made a simple cmake module that defines a function to create the visibility definitions discussed in an earlier post about DEFINE_SYMBOL that some users (including me) get confused over.
In case someone come here looking for it, I pushed it here: http://gitorious.org/ferric-cmake-stuff/mainline/blobs/master/VisibilityDefinitions.cmake But I still think this could be supported in CMake. I will post it here since it on public domain, just keep in mind I did not test it on different platforms: #################################################################### # VisibilityDefinitions # # check_gcc_visibility() # GCC_SUPPORTS_VISIBILITY = true if gcc supports visibility # # add_visibility_definitions([PREFIX prefix] # [SHARED | STATIC] # [EXPORT_SUFFIX suffix] # [PRIVATE_SUFFIX suffix]) # # Adds the visibility definitions for the COMPILE_DEFINITIONS # property for the current directory. If neither SHARED nor STATIC # are given, BUILD_SHARED_LIBS will be used. # # GCC_SUPPORTS_VISIBILITY = true if gcc supports visibility macro (check_gcc_visibility) include (CheckCXXCompilerFlag) check_cxx_compiler_flag(-fvisibility=hidden GCC_SUPPORTS_VISIBILITY) endmacro() function (add_visibility_definitions) set (GCC_EXPORT __attribute__\(\(visibility\(\"default\"\)\)\)) set (GCC_PRIVATE __attribute__\(\(visibility\(\"hidden\"\)\)\)) set (WIN_EXPORT __declspec\(dllexport\)) set (WIN_PRIVATE __declspec\(dllimport\)) foreach(ARG ${ARGV}) if (LAST_ARG STREQUAL "PREFIX") set (PREFIX ${ARG}) unset (LAST_ARG) elseif(LAST_ARG STREQUAL "EXPORT_SUFFIX") set (EXPORT_SUFFIX ${ARG}) unset (LAST_ARG) elseif(LAST_ARG STREQUAL "PRIVATE_SUFFIX") set (PRIVATE_SUFFIX ${ARG}) unset (LAST_ARG) else() if (ARG STREQUAL "SHARED") set (SHARED TRUE) elseif(ARG STREQUAL "STATIC") set (SHARED FALSE) else() set (LAST_ARG ${ARG}) endif() endif() endforeach() if (NOT DEFINED SHARED) set (SHARED ${BUILD_SHARED_LIBS}) endif() if (NOT EXPORT_SUFFIX) set (EXPORT_SUFFIX _EXPORTS) endif() if (NOT PRIVATE_SUFFIX) set (PRIVATE_SUFFIX _PRIVATE) endif() if (UNIX) check_gcc_visibility() if (GCC_SUPPORTS_VISIBILITY) add_definitions (-D${PREFIX}${EXPORT_SUFFIX}=${GCC_EXPORT} -D${PREFIX}${PRIVATE_SUFFIX}=${GCC_PRIVATE}) else() add_definitions (-D${PREFIX}${EXPORT_SUFFIX} -D${PREFIX}${PRIVATE_SUFFIX}) endif() elseif (WIN32) if (SHARED) add_definitions (-D${PREFIX}${EXPORT_SUFFIX}=${WIN_EXPORT} -D${PREFIX}${PRIVATE_SUFFIX}=${WIN_PRIVATE}) else() add_definitions (-D${PREFIX}${EXPORT_SUFFIX} -D${PREFIX}${PRIVATE_SUFFIX}) endif() endif() endfunction() #################################################################### Kind regards, Hilton _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake