Przeglądaj źródła

Improve cmake rules

- Migrate to cache properties in basic cmake
- Replace QT_PROTOBUF_EXECUTABLE related logic with EXPORT based
  approach
Alexey Edelev 4 lat temu
rodzic
commit
418c124eec

+ 4 - 13
CMakeLists.txt

@@ -47,8 +47,6 @@ endif()
 set(gtest_force_shared_crt OFF)
 set(GENERATOR_TARGET qtprotobufgen)
 set(PROTOBUF_QUICK_PLUGIN_NAME protobufquickplugin)
-set(QT_PROTOBUF_EXECUTABLE_INSTALL ${CMAKE_INSTALL_FULL_BINDIR}/${GENERATOR_TARGET})
-set(QT_PROTOBUF_EXECUTABLE $<TARGET_FILE:${GENERATOR_TARGET}> CACHE STRING "QT_PROTOBUF_EXECUTABLE is set ${QT_PROTOBUF_EXECUTABLE}" FORCE)
 
 if(UNIX)
     if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
@@ -111,17 +109,10 @@ if(DEFINED DOXYGEN_EXECUTABLE)
     )
 endif()
 
-if(DEFINED $ENV{QT_PROTOBUF_MAKE_TESTS})
-    set(QT_PROTOBUF_MAKE_TESTS $ENV{QT_PROTOBUF_MAKE_TESTS})
-elseif(NOT DEFINED QT_PROTOBUF_MAKE_TESTS)
-    set(QT_PROTOBUF_MAKE_TESTS ON)
-endif()
-
-if(DEFINED $ENV{QT_PROTOBUF_MAKE_EXAMPLES})
-    set(QT_PROTOBUF_MAKE_EXAMPLES $ENV{QT_PROTOBUF_MAKE_EXAMPLES})
-elseif(NOT DEFINED QT_PROTOBUF_MAKE_EXAMPLES)
-    set(QT_PROTOBUF_MAKE_EXAMPLES ON)
-endif()
+set(QT_PROTOBUF_MAKE_TESTS ON CACHE BOOL "Enable QtProtobuf tests build")
+set(QT_PROTOBUF_MAKE_EXAMPLES ON CACHE BOOL "Enable QtProtobuf examples build")
+set(QT_PROTOBUF_STATIC OFF CACHE BOOL "Enable QtProtobuf static library build (disables shared library build)")
+set(QT_PROTOBUF_MAKE_COVERAGE OFF CACHE BOOL "Enable QtProtobuf build for profiler (gcov)")
 
 if(NOT gRPC_FOUND)
     message(WARNING "gRPC not found: some tests and examples cannot be built.")

+ 1 - 3
cmake/QtProtobufGen.cmake

@@ -20,9 +20,7 @@ function(qtprotobuf_generate)
 
     set(GEN_TARGET ${GENERATED_TARGET_NAME}_generate)
 
-    if(NOT DEFINED QT_PROTOBUF_EXECUTABLE)
-        set(QT_PROTOBUF_EXECUTABLE "${QT_PROTOBUF_EXECUTABLE_INSTALL}")
-    endif()
+    set(QT_PROTOBUF_EXECUTABLE $<TARGET_FILE:${QT_PROTOBUF_PROJECT}::${GENERATOR_TARGET}>)
 
     #Options handling
     set(GENERATION_TYPE "SIGNLE")

+ 10 - 3
src/generator/CMakeLists.txt

@@ -1,8 +1,8 @@
-project(qtprotobufgen VERSION ${QT_PROTOBUF_VERSION} LANGUAGES CXX)
-
-set(TARGET ${PROJECT_NAME})
+set(TARGET ${GENERATOR_TARGET})
 set(TARGET_EXPORT ${TARGET}Targets)
+
 set(TARGET_BINDIR ${CMAKE_INSTALL_BINDIR})
+set(TARGET_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
 
 file(GLOB SOURCES main.cpp
     generatorcommon.cpp
@@ -41,6 +41,8 @@ file(GLOB HEADERS utils.h
 
 add_executable(${TARGET} ${SOURCES})
 
+add_executable(${QT_PROTOBUF_PROJECT}::${TARGET} ALIAS ${TARGET})
+
 if(DEFINED Protobuf_INCLUDE_DIRS)
     target_include_directories(${TARGET} PUBLIC ${Protobuf_INCLUDE_DIRS})
 endif()
@@ -48,4 +50,9 @@ endif()
 target_link_libraries(${TARGET} protobuf::libprotobuf protobuf::libprotoc)
 
 install(TARGETS ${TARGET}
+    EXPORT ${TARGET_EXPORT} COMPONENT dev
     RUNTIME DESTINATION ${TARGET_BINDIR} COMPONENT lib)
+
+install(EXPORT ${TARGET_EXPORT} NAMESPACE ${QT_PROTOBUF_PROJECT}:: FILE ${TARGET_EXPORT}.cmake DESTINATION ${TARGET_CMAKE_DIR} COMPONENT dev)
+
+export(TARGETS ${TARGET} NAMESPACE ${QT_PROTOBUF_PROJECT}:: FILE ${TARGET_EXPORT}.cmake)

+ 2 - 0
src/protobuf/CMakeLists.txt

@@ -138,6 +138,8 @@ install(FILES "${QT_PROTOBUF_BINARY_DIR}/ProtobufLookup.cmake" DESTINATION "${TA
 if(QT_PROTOBUF_STATIC) #extra config for .pri file in case if static build enabled
     set(QT_PROTOBUF_EXTRA_CONFIG "staticlib")
 endif()
+
+set(QT_PROTOBUF_EXECUTABLE_INSTALL ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${GENERATOR_TARGET})
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/qt_lib_protobuf.pri.in" "${QT_PROTOBUF_BINARY_DIR}/qt_lib_protobuf.pri" @ONLY)
 install(FILES "${QT_PROTOBUF_BINARY_DIR}/qt_lib_protobuf.pri" DESTINATION "${QT_HOST_DATA}/mkspecs/modules" COMPONENT dev)
 

+ 4 - 1
src/protobuf/QtProtobufConfig.cmake.in

@@ -7,6 +7,10 @@ if(QT_PROTOBUF_STATIC)
     find_dependency(microjson REQUIRED CONFIG)
 endif()
 
+if(NOT TARGET @GENERATOR_TARGET@ AND NOT @GENERATOR_TARGET@_BINARY_DIR)
+    include("${CMAKE_CURRENT_LIST_DIR}/@GENERATOR_TARGET@Targets.cmake")
+endif()
+
 if(NOT TARGET @TARGET@ AND NOT @TARGET@_BINARY_DIR)
     include("${CMAKE_CURRENT_LIST_DIR}/@TARGET_EXPORT@.cmake")
 endif()
@@ -19,7 +23,6 @@ endif()
 set(PROTO_PARSER "${CMAKE_CURRENT_LIST_DIR}/parsemessages.go")
 set(GENERATOR_TARGET "@GENERATOR_TARGET@")
 set(QT_PROTOBUF_PROJECT "@QT_PROTOBUF_PROJECT@")
-set(QT_PROTOBUF_EXECUTABLE_INSTALL "@QT_PROTOBUF_EXECUTABLE_INSTALL@")
 
 if(QT_PROTOBUF_STATIC)
     add_definitions(-DQT_PROTOBUF_STATIC)#Old cmake versions compatibility