Browse Source

Introduce new build procedure

- Now all dependencies are ruled by target dependecies mechanisms
- Make common cmake namespace for protobuf libraries
- Integrate build-tree find_package support
Alexey Edelev 5 years ago
parent
commit
a55f18125a

+ 4 - 17
CMakeLists.txt

@@ -1,6 +1,8 @@
 cmake_minimum_required(VERSION 3.1)
 
-project(QtProtobuf VERSION 0.1.0)
+set(QTPROTOBUF_PROJECT_VERSION 0.1.0)
+project(QtProtobufProject VERSION ${QTPROTOBUF_PROJECT_VERSION} LANGUAGES CXX)
+set(QTPROTOBUF_COMMON_NAMESPACE QtProtobufProject)
 
 include(GNUInstallDirs)
 find_package(Protobuf)
@@ -8,16 +10,7 @@ find_package(Protobuf)
 # FIXME: what is the reason to set these variables in root CMake?
 
 set(GENERATOR_TARGET qtprotobufgen)
-set(PROTOBUF_LIBRARY_TARGET qtprotobuf)
-set(GRPC_LIBRARY_TARGET qtgrpc)
-
-set(TARGET_BIN_DIR ${CMAKE_INSTALL_BINDIR})
-set(TARGET_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
-set(TARGET_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
-set(TARGET_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
-
-# FIXME: each target must expose their headers via target_include_directories
-include_directories(${CMAKE_SOURCE_DIR}/src/protobuf ${CMAKE_SOURCE_DIR}/src/grpc)
+set(QTPROTOBUF_EXECUTABLE_INSTALL ${CMAKE_INSTALL_FULL_BINDIR}/${GENERATOR_TARGET})
 
 find_program(gRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
 if (gRPC_CPP_PLUGIN_EXECUTABLE STREQUAL gRPC_CPP_PLUGIN_EXECUTABLE-NOTFOUND)
@@ -61,10 +54,6 @@ endif()
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
-include(cmake/QtProtobufCommon.cmake)
-configure_file(cmake/QtProtobufConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake/QtProtobufConfig.cmake @ONLY)
-include(${CMAKE_CURRENT_BINARY_DIR}/cmake/QtProtobufConfig.cmake)
-
 add_subdirectory("src/protobuf")
 add_subdirectory("src/grpc")
 add_subdirectory("src/generator")
@@ -132,5 +121,3 @@ if(MAKE_EXAMPLES)
     add_subdirectory("examples/simplechat")
     add_subdirectory("examples/simplechatserver")
 endif()
-
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/QtProtobufConfig.cmake DESTINATION ${TARGET_CMAKE_DIR} PERMISSIONS OWNER_WRITE GROUP_READ WORLD_READ)

+ 4 - 2
cmake/QtProtobufCommon.cmake

@@ -1,3 +1,5 @@
+find_package(QtProtobuf REQUIRED)
+
 function(protobuf_generate_all)
     set(options)
     set(oneValueArgs OUT_DIR TARGET)
@@ -59,10 +61,10 @@ function(add_test_target)
 
     add_executable(${add_test_target_TARGET} ${add_test_target_SOURCES})
     if(Qt5_POSITION_INDEPENDENT_CODE)
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
         set_target_properties(${add_test_target_TARGET} PROPERTIES POSITION_INDEPENDENT_CODE FALSE)
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
     endif()
     add_dependencies(${add_test_target_TARGET} ${QtProtobuf_GENERATED})
-    target_link_libraries(${add_test_target_TARGET} gtest_main gtest ${QtProtobuf_GENERATED} ${GRPC_LIBRARY_TARGET} ${PROTOBUF_LIBRARY_TARGET} Qt5::Core Qt5::Qml Qt5::Network)
+    target_link_libraries(${add_test_target_TARGET} gtest_main gtest ${QtProtobuf_GENERATED} ${QTPROTOBUF_COMMON_NAMESPACE}::QtProtobuf ${QTPROTOBUF_COMMON_NAMESPACE}::QtGrpc Qt5::Core Qt5::Qml Qt5::Network)
     target_include_directories(${add_test_target_TARGET} PRIVATE ${GENERATED_SOURCES_DIR})
 endfunction(add_test_target)

+ 2 - 4
cmake/QtProtobufConfig.cmake.in → cmake/QtProtobufFunctions.cmake.in

@@ -2,10 +2,8 @@ find_package(Protobuf)
 # TODO: replace with target_link_directories once released
 link_directories(@TARGET_LIB_DIR@)
 
-set(QtProtobuf_INCLUDE_DIRS @TARGET_INCLUDE_DIR@)
-set(QtGrpc_INCLUDE_DIRS @TARGET_INCLUDE_DIR@)
-set(QtProtobuf_LIBRARIES @PROTOBUF_LIBRARY_TARGET@)
-set(QtGrpc_LIBRARIES @GRPC_LIBRARY_TARGET@)
+set(@TARGET@_INCLUDE_DIRS @TARGET_INCLUDE_DIR@)
+set(@TARGET@_LIBRARIES @PROTOBUF_LIBRARY_TARGET@)
 
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)

+ 3 - 1
examples/addressbook/CMakeLists.txt

@@ -5,6 +5,8 @@ set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
 find_package(Qt5 COMPONENTS Core Quick Network REQUIRED)
+find_package(QtProtobuf CONFIG REQUIRED)
+find_package(QtGrpc CONFIG REQUIRED)
 
 set(GENERATED_HEADERS
     addressbookclient.h
@@ -36,4 +38,4 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../addressbookserver/cert.pem DESTINATION
 add_executable(${TARGET} ${SOURCES} resources.qrc)
 add_dependencies(${TARGET} ${QtProtobuf_GENERATED})
 target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated)
-target_link_libraries(${TARGET} ${GRPC_LIBRARY_TARGET} ${PROTOBUF_LIBRARY_TARGET} ${QtProtobuf_GENERATED} Qt5::Quick Qt5::Qml)
+target_link_libraries(${TARGET} QtProtobufProject::QtProtobuf QtProtobufProject::QtGrpc ${QtProtobuf_GENERATED} Qt5::Quick Qt5::Qml)

+ 2 - 0
examples/addressbookserver/CMakeLists.txt

@@ -1,5 +1,7 @@
 set(TARGET addressbookserver)
 
+include(${CMAKE_SOURCE_DIR}/cmake/QtProtobufCommon.cmake)
+
 set(GENERATED_SOURCES
     ${CMAKE_CURRENT_BINARY_DIR}/addressbook.pb.cc
     ${CMAKE_CURRENT_BINARY_DIR}/addressbook.grpc.pb.cc)

+ 3 - 1
examples/simplechat/CMakeLists.txt

@@ -5,6 +5,8 @@ set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
 find_package(Qt5 COMPONENTS Core Quick Network REQUIRED)
+find_package(QtProtobuf REQUIRED)
+find_package(QtGrpc REQUIRED)
 
 set(GENERATED_HEADERS
     chatmessage.h
@@ -31,4 +33,4 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../simplechatserver/cert.pem DESTINATION $
 add_executable(${TARGET} ${SOURCES} resources.qrc)
 add_dependencies(${TARGET} ${QtProtobuf_GENERATED})
 target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated)
-target_link_libraries(${TARGET} ${GRPC_LIBRARY_TARGET} ${PROTOBUF_LIBRARY_TARGET} ${QtProtobuf_GENERATED} Qt5::Quick Qt5::Qml)
+target_link_libraries(${TARGET}  QtProtobufProject::QtProtobuf QtProtobufProject::QtGrpc ${QtProtobuf_GENERATED} Qt5::Quick Qt5::Qml)

+ 2 - 0
examples/simplechatserver/CMakeLists.txt

@@ -1,5 +1,7 @@
 set(TARGET simplechatserver)
 
+include(${CMAKE_SOURCE_DIR}/cmake/QtProtobufCommon.cmake)
+
 set(GENERATED_SOURCES
     ${CMAKE_CURRENT_BINARY_DIR}/simplechat.pb.cc
     ${CMAKE_CURRENT_BINARY_DIR}/simplechat.grpc.pb.cc)

+ 5 - 1
src/generator/CMakeLists.txt

@@ -1,4 +1,8 @@
-set(TARGET ${GENERATOR_TARGET})
+project(qtprotobufgen VERSION ${QTPROTOBUF_PROJECT_VERSION} LANGUAGES CXX)
+
+set(TARGET ${PROJECT_NAME})
+set(TARGET_EXPORT ${TARGET}Targets)
+set(TARGET_BIN_DIR ${CMAKE_INSTALL_BINDIR})
 
 file(GLOB SOURCES main.cpp
     generator.cpp

+ 33 - 11
src/grpc/CMakeLists.txt

@@ -1,5 +1,13 @@
-set(TARGET ${GRPC_LIBRARY_TARGET})
-set(SHARED_TARGET ${TARGET}-shared)
+project(QtGrpc VERSION ${QTPROTOBUF_PROJECT_VERSION} LANGUAGES CXX)
+
+set(TARGET ${PROJECT_NAME})
+set(TARGET_STATIC ${TARGET}Static)
+set(TARGET_EXPORT ${TARGET}Targets)
+set(TARGET_CONFIG ${TARGET}Config)
+
+set(TARGET_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
+set(TARGET_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
+set(TARGET_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
 
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
@@ -20,18 +28,32 @@ file(GLOB HEADERS asyncreply.h
     sslcredentials.h
     insecurecredentials.h)
 
-set(INCLUDE_DIRS INTERFACE ${CURRENT_SOURCE_DIR} PUBLIC ${CMAKE_SOURCE_DIR}/src/protobuf ${Qt5Core_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS})
+set(INCLUDE_DIRS PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<INSTALL_INTERFACE:${TARGET_INCLUDE_DIR}>)
 
-add_library(${TARGET} ${SOURCES})
+add_library(${TARGET} SHARED ${SOURCES})
+add_library(${QTPROTOBUF_COMMON_NAMESPACE}::${TARGET} ALIAS ${TARGET})
+set_target_properties(${TARGET} PROPERTIES VERSION ${PROJECT_VERSION} PUBLIC_HEADER "${HEADERS}" OUTPUT_NAME ${TARGET})
 target_include_directories(${TARGET} ${INCLUDE_DIRS})
+target_link_libraries(${TARGET} PUBLIC ${QTPROTOBUF_COMMON_NAMESPACE}::QtProtobuf Qt5::Core Qt5::Network)
+target_compile_features(${TARGET} PUBLIC cxx_std_14)
 
-add_library(${SHARED_TARGET} SHARED)
-set_target_properties(${SHARED_TARGET} PROPERTIES VERSION ${PROJECT_VERSION} PUBLIC_HEADER "${HEADERS}" OUTPUT_NAME ${TARGET})
-target_include_directories(${SHARED_TARGET} ${INCLUDE_DIRS})
-target_link_libraries(${SHARED_TARGET} PRIVATE $<TARGET_FILE:${TARGET}> PUBLIC ${PROTOBUF_LIBRARY_TARGET} Qt5::Network Qt5::Core)
-add_dependencies(${SHARED_TARGET} ${PROTOBUF_LIBRARY_TARGET})
-
-install(TARGETS ${TARGET} ${SHARED_TARGET}
+install(TARGETS ${TARGET}
+    EXPORT ${TARGET_EXPORT}
     ARCHIVE DESTINATION ${TARGET_LIB_DIR}
     PUBLIC_HEADER DESTINATION ${TARGET_INCLUDE_DIR}
     LIBRARY DESTINATION ${TARGET_LIB_DIR})
+
+install(EXPORT ${TARGET_EXPORT} NAMESPACE ${QTPROTOBUF_COMMON_NAMESPACE}:: FILE ${TARGET_EXPORT}.cmake DESTINATION ${TARGET_CMAKE_DIR})
+
+include(CMakePackageConfigHelpers)
+configure_package_config_file(
+    "${TARGET_CONFIG}.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_CMAKE_DIR}/${TARGET_CONFIG}.cmake"
+    INSTALL_DESTINATION "${TARGET_CMAKE_DIR}")
+configure_package_config_file(
+    "${TARGET_CONFIG}Tree.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_CONFIG}.cmake"
+    INSTALL_DESTINATION "${TARGET_CMAKE_DIR}")
+
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_CMAKE_DIR}/${TARGET_CONFIG}.cmake" DESTINATION "${TARGET_CMAKE_DIR}")
+
+export(TARGETS ${TARGET} NAMESPACE ${QTPROTOBUF_COMMON_NAMESPACE}:: FILE ${TARGET_EXPORT}.cmake)
+export(PACKAGE ${TARGET})

+ 8 - 0
src/grpc/QtGrpcConfig.cmake.in

@@ -0,0 +1,8 @@
+include(CMakeFindDependencyMacro)
+find_dependency(Protobuf REQUIRED)
+find_dependency(QtProtobuf REQUIRED)
+
+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET_EXPORT@.cmake")
+
+@PACKAGE_INIT@
+

+ 6 - 0
src/grpc/QtGrpcConfigTree.cmake.in

@@ -0,0 +1,6 @@
+include(CMakeFindDependencyMacro)
+find_dependency(Protobuf REQUIRED)
+find_dependency(QtProtobuf REQUIRED)
+
+@PACKAGE_INIT@
+

+ 36 - 11
src/protobuf/CMakeLists.txt

@@ -1,5 +1,13 @@
-set(TARGET ${PROTOBUF_LIBRARY_TARGET})
-set(SHARED_TARGET ${TARGET}-shared)
+project(QtProtobuf VERSION ${QTPROTOBUF_PROJECT_VERSION} LANGUAGES CXX)
+
+set(TARGET ${PROJECT_NAME})
+set(TARGET_STATIC ${TARGET}Static)
+set(TARGET_EXPORT ${TARGET}Targets)
+set(TARGET_CONFIG ${TARGET}Config)
+
+set(TARGET_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
+set(TARGET_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
+set(TARGET_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
 
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
@@ -19,18 +27,35 @@ file(GLOB HEADERS
     selfcheckiterator.h
     qtprotobuflogging.h)
 
-set(INCLUDE_DIRS INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC ${Qt5Core_INCLUDE_DIRS} ${Qt5Qml_INCLUDE_DIRS})
+set(INCLUDE_DIRS PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<INSTALL_INTERFACE:${TARGET_INCLUDE_DIR}>)
 
-add_library(${TARGET} ${SOURCES})
+add_library(${TARGET} SHARED ${SOURCES})
+add_library(${QTPROTOBUF_COMMON_NAMESPACE}::${TARGET} ALIAS ${TARGET})
+set_target_properties(${TARGET} PROPERTIES VERSION ${PROJECT_VERSION} PUBLIC_HEADER "${HEADERS}" OUTPUT_NAME ${TARGET})
 target_include_directories(${TARGET} ${INCLUDE_DIRS})
+target_link_libraries(${TARGET} PUBLIC Qt5::Core Qt5::Qml)
+target_compile_features(${TARGET} PUBLIC cxx_std_14)
 
-add_library(${SHARED_TARGET} SHARED)
-set_target_properties(${SHARED_TARGET} PROPERTIES VERSION ${PROJECT_VERSION} PUBLIC_HEADER "${HEADERS}" OUTPUT_NAME ${TARGET})
-target_include_directories(${SHARED_TARGET} ${INCLUDE_DIRS})
-target_link_libraries(${SHARED_TARGET} PRIVATE $<TARGET_FILE:${TARGET}> PUBLIC Qt5::Core Qt5::Qml)
-add_dependencies(${SHARED_TARGET} ${PROTOBUF_LIBRARY_TARGET})
-
-install(TARGETS ${TARGET} ${SHARED_TARGET}
+install(TARGETS ${TARGET}
+    EXPORT ${TARGET_EXPORT}
     ARCHIVE DESTINATION ${TARGET_LIB_DIR}
     PUBLIC_HEADER DESTINATION ${TARGET_INCLUDE_DIR}
     LIBRARY DESTINATION ${TARGET_LIB_DIR})
+
+install(EXPORT ${TARGET_EXPORT} NAMESPACE ${QTPROTOBUF_COMMON_NAMESPACE}:: FILE ${TARGET_EXPORT}.cmake DESTINATION ${TARGET_CMAKE_DIR})
+
+include(CMakePackageConfigHelpers)
+configure_package_config_file(
+    "${TARGET_CONFIG}.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_CMAKE_DIR}/${TARGET_CONFIG}.cmake"
+    INSTALL_DESTINATION "${TARGET_CMAKE_DIR}")
+configure_package_config_file(
+    "${TARGET_CONFIG}Tree.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_CONFIG}.cmake"
+    INSTALL_DESTINATION "${TARGET_CMAKE_DIR}")
+
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_CMAKE_DIR}/${TARGET_CONFIG}.cmake" DESTINATION "${TARGET_CMAKE_DIR}")
+
+export(TARGETS ${TARGET} NAMESPACE ${QTPROTOBUF_COMMON_NAMESPACE}:: FILE ${TARGET_EXPORT}.cmake)
+export(PACKAGE ${TARGET})
+
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/QtProtobufGen.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/QtProtobufGen.cmake" @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/QtProtobufGen.cmake DESTINATION "${TARGET_CMAKE_DIR}")

+ 8 - 0
src/protobuf/QtProtobufConfig.cmake.in

@@ -0,0 +1,8 @@
+include(CMakeFindDependencyMacro)
+find_dependency(Protobuf REQUIRED)
+
+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET_EXPORT@.cmake")
+
+@PACKAGE_INIT@
+
+include("${CMAKE_CURRENT_LIST_DIR}/QtProtobufGen.cmake")

+ 6 - 0
src/protobuf/QtProtobufConfigTree.cmake.in

@@ -0,0 +1,6 @@
+include(CMakeFindDependencyMacro)
+find_dependency(Protobuf REQUIRED)
+
+@PACKAGE_INIT@
+
+include("${CMAKE_CURRENT_LIST_DIR}/QtProtobufGen.cmake")

+ 63 - 0
src/protobuf/QtProtobufGen.cmake.in

@@ -0,0 +1,63 @@
+function(generate_qtprotobuf)
+    set(options)
+    set(oneValueArgs OUT_DIR TARGET)
+    set(multiValueArgs GENERATED_HEADERS PROTO_FILES)
+    cmake_parse_arguments(generate_qtprotobuf "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+    set(QtProtobuf_GENERATED ${generate_qtprotobuf_TARGET}_qtprotobuf_gen PARENT_SCOPE)
+    set(QtProtobuf_GENERATED ${generate_qtprotobuf_TARGET}_qtprotobuf_gen)
+
+    set(GEN_TARGET ${generate_qtprotobuf_TARGET}_qtprotobuf_generate)
+
+    add_custom_target(${GEN_TARGET})
+    message(STATUS "add_custom_target ${GEN_TARGET} ${Protobuf_PROTOC_EXECUTABLE}")
+
+    if(NOT DEFINED QTPROTOBUF_EXECUTABLE)
+        set(QTPROTOBUF_EXECUTABLE @QTPROTOBUF_EXECUTABLE_INSTALL@)
+    endif()
+    foreach(PROTO_FILE IN LISTS generate_qtprotobuf_PROTO_FILES)
+        get_filename_component(BASE_DIR ${PROTO_FILE} DIRECTORY)
+        set(PROTO_INCLUDES -I"${BASE_DIR}" ${PROTO_INCUDES})
+    endforeach()
+
+    if(NOT DEFINED generate_qtprotobuf_OUT_DIR)
+        set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
+    else()
+        set(OUT_DIR ${generate_qtprotobuf_OUT_DIR})
+    endif()
+
+    file(MAKE_DIRECTORY ${OUT_DIR})
+
+    unset(QTPROTOBUF_GENERATED_SOURCES)
+    unset(QTPROTOBUF_GENERATED_HEADERS)
+    foreach(GENERATED_HEADER IN LISTS generate_qtprotobuf_GENERATED_HEADERS)
+        get_filename_component(GENERATED_BASENAME ${GENERATED_HEADER} NAME_WE)
+
+        list(APPEND QTPROTOBUF_GENERATED_SOURCES ${OUT_DIR}/${GENERATED_BASENAME}.cpp)
+        list(APPEND QTPROTOBUF_GENERATED_HEADERS ${OUT_DIR}/${GENERATED_BASENAME}.h)
+        set_property(SOURCE ${OUT_DIR}/${GENERATED_BASENAME}.cpp PROPERTY SKIP_AUTOMOC ON)
+    endforeach()
+
+    add_custom_command(TARGET ${GEN_TARGET}
+            COMMAND ${Protobuf_PROTOC_EXECUTABLE}
+                --@GENERATOR_TARGET@_opt=out=${OUT_DIR}
+                --plugin=protoc-gen-@GENERATOR_TARGET@=${QTPROTOBUF_EXECUTABLE}
+                --@GENERATOR_TARGET@_out=${OUT_DIR}
+                ${PROTO_INCLUDES}
+                ${PROTO_FILES}
+            WORKING_DIRECTORY ${OUT_DIR}
+            DEPENDS ${PROTO_FILES}
+            COMMENT "Generating test headers"
+    )
+
+    qt5_wrap_cpp(MOC_SOURCES ${QTPROTOBUF_GENERATED_HEADERS})
+    list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
+    message(STATUS "GENERATED_SOURCES: ${GENERATED_SOURCES}")
+    set_source_files_properties(${QTPROTOBUF_GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
+    add_library(${QtProtobuf_GENERATED} ${QTPROTOBUF_GENERATED_SOURCES} ${MOC_SOURCES})
+    add_dependencies(${QtProtobuf_GENERATED} ${GEN_TARGET})
+    target_include_directories(${QtProtobuf_GENERATED} PRIVATE ${Qt5Core_INCLUDE_DIRS}
+        $<TARGET_PROPERTY:@QTPROTOBUF_COMMON_NAMESPACE@::QtProtobuf,INTERFACE_INCLUDE_DIRECTORIES>
+        $<TARGET_PROPERTY:@QTPROTOBUF_COMMON_NAMESPACE@::QtGrpc,INTERFACE_INCLUDE_DIRECTORIES> ${OUT_DIR})
+endfunction()
+ 

+ 2 - 2
tests/CMakeLists.txt

@@ -1,2 +1,2 @@
-add_subdirectory(test_protobuf)
-add_subdirectory(test_grpc)
+add_subdirectory("test_protobuf")
+add_subdirectory("test_grpc")

+ 2 - 1
tests/test_grpc/CMakeLists.txt

@@ -2,6 +2,8 @@ configure_file(test_driver.sh.in test_driver.sh @ONLY)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/testfile ${CMAKE_CURRENT_BINARY_DIR}/testfile COPYONLY)
 
+include(${CMAKE_SOURCE_DIR}/cmake/QtProtobufCommon.cmake)
+
 set(TARGET qtgrpc_test)
 set(GENERATED_HEADERS
     simplestringmessage.h
@@ -20,7 +22,6 @@ add_test_target(TARGET ${TARGET}
 
 add_subdirectory(echoserver)
 
-message(STATUS "CMAKE_CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}")
 add_test(NAME qtgrpc_echo_test
          COMMAND test_driver.sh ./tests/test_grpc/qtgrpc_test ./tests/test_grpc/echoserver/echoserver
 )

+ 2 - 0
tests/test_protobuf/CMakeLists.txt

@@ -1,5 +1,7 @@
 set(TARGET qtprotobuf_test)
 
+include(${CMAKE_SOURCE_DIR}/cmake/QtProtobufCommon.cmake)
+
 set(GENERATED_HEADERS
     complexmessage.h
     externalcomplexmessage.h