à la recherche d'un CMakelist standard pour construire l'application OpenDDS (Simple Publisher/Subscriber). Je suis familier avec les tutoriels et tout fonctionne bien avec MPC pour construire les exemples. J'ai besoin de construire mon projet avec cmake. J'utilise OpenDDS 3.9.cmake pour OpenDDS Project
J'ai essayé de faire un CMakelist pour l'exemple StockQuote ici: http://opendds.org/about/articles/Article-Intro.html
Mon CMakelist se présente comme suit:
cmake_minimum_required (VERSION 3.3.0)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
project (publisher)
set(DDS_ROOT_DIR "home/ubuntu/OpenDDS-3.9")
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin)
include_directories (${DDS_ROOT_DIR} "${DDS_ROOT_DIR}/ACE_wrappers" "${DDS_ROOT_DIR}/ACE_wrappers/TAO" ${CMAKE_SOURCE_DIR})
file (GLOB_RECURSE PUBLISHER_SRC *.cpp)
file (GLOB_RECURSE IDL_SRC ${CMAKE_SOURCE_DIR} *.cpp)
add_executable (${PROJECT_NAME} ${PUBLISHER_SRC} ${IDL_SRC})
project (subscriber)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin)
include_directories (${DDS_ROOT_DIR} "${DDS_ROOT_DIR}/ACE_wrappers" "${DDS_ROOT_DIR}/ACE_wrappers/TAO" ${CMAKE_SOURCE_DIR})
file (GLOB_RECURSE SUBSCRIBER_SRC *.cpp)
file (GLOB_RECURSE IDL_SRC ${CMAKE_SOURCE_DIR} *.cpp)
add_executable (${PROJECT_NAME} ${SUBSCRIBER_SRC} ${IDL_SRC})
# Adding DDS link_libraries
if (WIN32)
file (GLOB OpenDDS_LIBS "${DDS_ROOT_DIR}/lib/*d.dll")
foreach (i ${OpenDDS_LIBS})
get_filename_component (BASE_NAME_DLL ${i} NAME_WE)
add_library (${BASE_NAME_DLL} SHARED IMPORTED)
set_property (TARGET ${BASE_NAME_DLL} PROPERTY IMPORTED_LOCATION "${DDS_ROOT_DIR}/lib/${BASE_NAME_DLL}.dll")
set_property (TARGET ${BASE_NAME_DLL} PROPERTY IMPORTED_IMPLIB "${DDS_ROOT_DIR}/lib/${BASE_NAME_DLL}.lib")
target_link_libraries (${PROJECT_NAME} ${BASE_NAME_DLL})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${BASE_NAME_DLL}> $<TARGET_FILE_DIR:${PROJECT_NAME}>)
endforeach()
file (GLOB OpenDDS_LIBS "${DDS_ROOT_DIR}/ACE_wrappers/lib/*d.dll")
foreach (i ${OpenDDS_LIBS})
get_filename_component (BASE_NAME_DLL ${i} NAME_WE)
add_library (${BASE_NAME_DLL} SHARED IMPORTED)
set_property (TARGET ${BASE_NAME_DLL} PROPERTY IMPORTED_LOCATION "${DDS_ROOT_DIR}/ACE_wrappers/lib/${BASE_NAME_DLL}.dll")
set_property (TARGET ${BASE_NAME_DLL} PROPERTY IMPORTED_IMPLIB "${DDS_ROOT_DIR}/ACE_wrappers/lib/${BASE_NAME_DLL}.lib")
target_link_libraries (${PROJECT_NAME} ${BASE_NAME_DLL})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${BASE_NAME_DLL}> $<TARGET_FILE_DIR:${PROJECT_NAME}>)
endforeach()
elseif (UNIX)
file (GLOB OpenDDS_LIBS "${DDS_ROOT_DIR}/lib/*.so")
foreach (i ${OpenDDS_LIBS})
get_filename_component (BASE_NAME_DLL ${i} NAME_WE)
add_library (${BASE_NAME_DLL} SHARED IMPORTED)
set_property (TARGET ${BASE_NAME_DLL} PROPERTY IMPORTED_LOCATION "${DDS_ROOT_DIR}/lib/${BASE_NAME_DLL}.so")
target_link_libraries (${PROJECT_NAME} ${BASE_NAME_DLL})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${BASE_NAME_DLL}> $<TARGET_FILE_DIR:${PROJECT_NAME}>)
endforeach()
file (GLOB OpenDDS_LIBS "${DDS_ROOT_DIR}/ACE_wrappers/lib/*.so")
foreach (i ${OpenDDS_LIBS})
get_filename_component (BASE_NAME_DLL ${i} NAME_WE)
add_library (${BASE_NAME_DLL} SHARED IMPORTED)
set_property (TARGET ${BASE_NAME_DLL} PROPERTY IMPORTED_LOCATION "${DDS_ROOT_DIR}/ACE_wrappers/lib/${BASE_NAME_DLL}.so")
target_link_libraries (${PROJECT_NAME} ${BASE_NAME_DLL})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${BASE_NAME_DLL}> $<TARGET_FILE_DIR:${PROJECT_NAME}>)
endforeach()
endif()
Je suis l'ajout de DDS Link Libraries Section du blog WTeam. http://www.wteam.it/index.php/articles/the-hla-series/9-article/15-first-opendds-program
que je reçois actuellement ce message d'erreur si j'utilise CMake --build:
/usr/local/include/dds/DCPS/DataWriterImpl_T.h: In instantiation of ‘void OpenDDS::DCPS::DataWriterImpl_T::init(DDS::Topic_ptr, OpenDDS::DCPS::TopicImpl*, const DDS::DataWriterQos&, DDS::DataWriterListener_ptr, const StatusMask&, OpenDDS::DCPS::DomainParticipantImpl*, OpenDDS::DCPS::PublisherImpl*, DDS::DataWriter_ptr) [with MessageType = Messenger::Message; DDS::Topic_ptr = DDS::Topic*; DDS::DataWriterListener_ptr = DDS::DataWriterListener*; DDS::StatusMask = unsigned int; DDS::DataWriter_ptr = DDS::DataWriter*]’: /usr/local/include/dds/DCPS/FilterEvaluator.h:142:10: required from here /usr/local/include/dds/DCPS/DataWriterImpl_T.h:317:50: error: incomplete type ‘OpenDDS::DCPS::DataWriterImpl_T::MarshalTraitsType {aka OpenDDS::DCPS::MarshalTraits}’ used in nested name specifier if (MarshalTraitsType::gen_is_bounded_size()) { ^/usr/local/include/dds/DCPS/DataWriterImpl_T.h:323:54: error: incomplete type ‘OpenDDS::DCPS::DataWriterImpl_T::MarshalTraitsType {aka OpenDDS::DCPS::MarshalTraits}’ used in nested name specifier if (MarshalTraitsType::gen_is_bounded_key_size()) { ^/usr/local/include/dds/DCPS/DataWriterImpl_T.h: In instantiation of ‘DDS::ReturnCode_t OpenDDS::DCPS::DataWriterImpl_T::enable_specific() [with MessageType = Messenger::Message; DDS::ReturnCode_t = int]’: /usr/local/include/dds/DCPS/FilterEvaluator.h:142:10: required from here /usr/local/include/dds/DCPS/DataWriterImpl_T.h:338:51: error: incomplete type ‘OpenDDS::DCPS::DataWriterImpl_T::MarshalTraitsType {aka OpenDDS::DCPS::MarshalTraits}’ used in nested name specifier if (MarshalTraitsType::gen_is_bounded_size()) ^
Est-ce que quelqu'un a une idée ce qui est erroné ou a un CMake standard pour les applications de OpenDDS? Merci beaucoup pour toute aide.
Cheers, Marcel