diff --git a/CMakeLists.txt b/CMakeLists.txt index 348085e..5cc4d11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,9 @@ ament_target_dependencies(${PROJECT_NAME} PUBLIC install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} - DESTINATION lib + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin ) install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION include/${PROJECT_NAME} @@ -64,6 +66,7 @@ install(PROGRAMS ) set_target_properties(${PROJECT_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +target_compile_definitions(${PROJECT_NAME} PRIVATE "SRDFDOM_BUILDING_DLL") if(BUILD_TESTING) find_package(ament_cmake_gtest REQUIRED) @@ -90,4 +93,5 @@ ament_export_libraries(${PROJECT_NAME} ${TinyXML2_LIBRARIES}) ament_export_dependencies(console_bridge) ament_export_dependencies(urdfdom_headers) ament_export_dependencies(urdf) +ament_export_dependencies(TinyXML2) ament_package() diff --git a/include/srdfdom/model.h b/include/srdfdom/model.h index 7c1a69d..985f07e 100644 --- a/include/srdfdom/model.h +++ b/include/srdfdom/model.h @@ -45,11 +45,13 @@ #include #include +#include "visibility_control.h" + /// Main namespace namespace srdf { /** \brief Representation of semantic information about the robot */ -class Model +class SRDFDOM_PUBLIC Model { public: Model() diff --git a/include/srdfdom/visibility_control.h b/include/srdfdom/visibility_control.h new file mode 100644 index 0000000..2c46c73 --- /dev/null +++ b/include/srdfdom/visibility_control.h @@ -0,0 +1,35 @@ +#ifndef SRDFDOM__VISIBILITY_CONTROL_H_ +#define SRDFDOM__VISIBILITY_CONTROL_H_ + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ +#ifdef __GNUC__ +#define SRDFDOM_EXPORT __attribute__((dllexport)) +#define SRDFDOM_IMPORT __attribute__((dllimport)) +#else +#define SRDFDOM_EXPORT __declspec(dllexport) +#define SRDFDOM_IMPORT __declspec(dllimport) +#endif +#ifdef SRDFDOM_BUILDING_DLL +#define SRDFDOM_PUBLIC SRDFDOM_EXPORT +#else +#define SRDFDOM_PUBLIC SRDFDOM_IMPORT +#endif +#define SRDFDOM_PUBLIC_TYPE SRDFDOM_PUBLIC +#define SRDFDOM_LOCAL +#else +#define SRDFDOM_EXPORT __attribute__((visibility("default"))) +#define SRDFDOM_IMPORT +#if __GNUC__ >= 4 +#define SRDFDOM_PUBLIC __attribute__((visibility("default"))) +#define SRDFDOM_LOCAL __attribute__((visibility("hidden"))) +#else +#define SRDFDOM_PUBLIC +#define SRDFDOM_LOCAL +#endif +#define SRDFDOM_PUBLIC_TYPE +#endif + +#endif // SRDFDOM__VISIBILITY_CONTROL_H_