From 09f6a5c1d2da9fe30e2bcb63045165728efe1fa2 Mon Sep 17 00:00:00 2001 From: Walter Gray Date: Mon, 6 Jun 2016 10:58:50 -0700 Subject: Use ExternalProject_Add to build the examples in a stand-alone fashion. --- examples/CMakeLists.txt | 104 ++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 60 deletions(-) (limited to 'examples') diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index b4796f1c..c9d46885 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -2,78 +2,62 @@ cmake_minimum_required(VERSION 2.8.12) # Project -project(addressbook) +project(protobuf-examples) # Find required protobuf package -find_package(protobuf 3 CONFIG REQUIRED) +find_package(protobuf CONFIG REQUIRED) if(protobuf_VERBOSE) message(STATUS "Using Protocol Buffers ${Protobuf_VERSION}") endif() -file(GLOB SRC_LIST "*.cc") - -file(GLOB PROTO_LIST "*.proto") - -# -# Code generation -# - -if(protobuf_MODULE_COMPATIBLE) # Old school - - include_directories(${Protobuf_INCLUDE_DIRS}) - protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_LIST}) - -else() # New style - - set(PROTO_SRCS) - set(PROTO_HDRS) - - foreach(FIL ${PROTO_LIST}) - - get_filename_component(ABS_FIL ${FIL} ABSOLUTE) - get_filename_component(FIL_WE ${FIL} NAME_WE) - - list(APPEND PROTO_SRCS "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc") - list(APPEND PROTO_HDRS "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h") - - add_custom_command( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc" - "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h" - COMMAND protobuf::protoc - ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} -I ${CMAKE_CURRENT_SOURCE_DIR} - ${ABS_FIL} - DEPENDS ${ABS_FIL} - COMMENT "Running C++ protocol buffer compiler on ${FIL}" - VERBATIM) +set(CMAKE_INCLUDE_CURRENT_DIR TRUE) +# http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F +if(MSVC AND protobuf_MSVC_STATIC_RUNTIME) + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif(${flag_var} MATCHES "/MD") endforeach() - endif() -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -include(GNUInstallDirs) - -foreach(FIL ${SRC_LIST}) - - get_filename_component(FIL_NAME_WE ${FIL} NAME_WE) - - set(APP ${FIL_NAME_WE}_cpp) - - add_executable(${APP} ${FIL} ${PROTO_SRCS} ${PROTO_HDRS}) - - # - # Link libraries - # - - if(protobuf_MODULE_COMPATIBLE) # Old school - target_link_libraries(${APP} ${Protobuf_LIBRARIES}) - else() # New style - target_link_libraries(${APP} protobuf::libprotobuf) +foreach(example add_person list_people) + set(${example}_SRCS ${example}.cc) + set(${example}_PROTOS addressbook.proto) + + #Code Generation + if(protobuf_MODULE_COMPATIBLE) #Legacy Support + protobuf_generate_cpp(${example}_PROTO_SRCS ${example}_PROTO_HDRS ${${example}_PROTOS}) + list(APPEND ${example}_SRCS ${${example}_PROTO_SRCS} ${${example}_PROTO_HDRS}) + else() + + foreach(proto_file ${${example}_PROTOS}) + get_filename_component(proto_file_abs ${proto_file} ABSOLUTE) + get_filename_component(basename ${proto_file} NAME_WE) + set(generated_files ${basename}.pb.cc ${basename}.pb.h) + list(APPEND ${example}_SRCS ${generated_files}) + + add_custom_command( + OUTPUT ${generated_files} + COMMAND protobuf::protoc + ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} -I ${CMAKE_CURRENT_SOURCE_DIR} ${proto_file_abs} + COMMENT "Generating ${generated_files} from ${proto_file}" + VERBATIM + ) + endforeach() endif() - install(TARGETS ${APP} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${APP}) + #Executable setup + set(executable_name ${example}_cpp) + add_executable(${executable_name} ${${example}_SRCS} ${${example}_PROTOS}) + if(protobuf_MODULE_COMPATIBLE) #Legacy mode + target_include_directories(${executable_name} PUBLIC ${PROTOBUF_INCLUDE_DIRS}) + target_link_libraries(${executable_name} ${PROTOBUF_LIBRARIES}) + else() + target_link_libraries(${executable_name} protobuf::libprotobuf) + endif() endforeach() -- cgit v1.2.3