2017-10-09 6 views
1

à 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

Répondre

0

L'exemple de projet sur ce site Web est fourni avec OpenDDS sous le dossier 'exemples/DCPS. Il contient un script de construction, des instructions, etc.