if(protobuf_VERBOSE) message(STATUS "Protocol Buffers Examples Configuring...") endif() get_filename_component(examples_dir "${protobuf_SOURCE_DIR}/examples" ABSOLUTE) if(protobuf_VERBOSE) message(STATUS "Protocol Buffers Examples Configuring done") endif() include(ExternalProject) # Internal utility function: Create a custom target representing a build of examples with custom options. function(add_examples_build NAME) ExternalProject_Add(${NAME} PREFIX ${NAME} SOURCE_DIR "${examples_dir}" BINARY_DIR ${NAME} STAMP_DIR ${NAME}/logs INSTALL_COMMAND "" #Skip LOG_CONFIGURE 1 CMAKE_CACHE_ARGS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}" "-Dprotobuf_VERBOSE:BOOL=${protobuf_VERBOSE}" ${ARGN} ) set_property(TARGET ${NAME} PROPERTY FOLDER "Examples") set_property(TARGET ${NAME} PROPERTY EXCLUDE_FROM_ALL TRUE) endfunction() # Add examples as an external project. # sub_directory cannot be used because the find_package(protobuf) call would cause failures with redefined targets. add_examples_build(examples "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}") add_dependencies(examples libprotobuf protoc) option(protobuf_BUILD_EXAMPLES_MULTITEST "Build Examples in multiple configurations. Useful for testing." OFF) mark_as_advanced(protobuf_BUILD_EXAMPLES_MULTITEST) if(protobuf_BUILD_EXAMPLES_MULTITEST) set_property(GLOBAL PROPERTY USE_FOLDERS ON) #Build using the legacy compatibility module. add_examples_build(examples-legacy "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}" "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" ) add_dependencies(examples-legacy libprotobuf protoc) #Build using the installed library. add_examples_build(examples-installed "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" ) #Build using the installed library in legacy compatibility mode. add_examples_build(examples-installed-legacy "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" ) endif()