瀏覽代碼

Change libraries cmake structure

- Use GNUInstallDirs for installation paths
- Fix build issue in simple chat
- Make shared libraries compiled from archives
Alexey Edelev 5 年之前
父節點
當前提交
6c7ed31bd9
共有 4 個文件被更改,包括 17 次插入22 次删除
  1. 5 9
      CMakeLists.txt
  2. 0 1
      examples/simplechat/CMakeLists.txt
  3. 6 6
      src/grpc/CMakeLists.txt
  4. 6 6
      src/protobuf/CMakeLists.txt

+ 5 - 9
CMakeLists.txt

@@ -2,23 +2,20 @@ cmake_minimum_required(VERSION 3.1)
 
 project(QtProtobuf VERSION 0.1.0)
 
+include(GNUInstallDirs)
 find_package(Protobuf)
 
 # FIXME: what is the reason to set these variables in root CMake?
-if(NOT DEFINED PREFIX)
-    set(PREFIX /usr)
-endif()
 
 set(GENERATOR_TARGET qtprotobufgen)
 set(PROTOBUF_LIBRARY_TARGET qtprotobuf)
 set(GRPC_LIBRARY_TARGET qtgrpc)
 
-set(TARGET_BIN_DIR ${PREFIX}/bin)
-set(TARGET_LIB_DIR ${PREFIX}/lib)
-set(TARGET_INCLUDE_DIR ${PREFIX}/include/${PROJECT_NAME})
-set(TARGET_CMAKE_DIR ${TARGET_LIB_DIR}/cmake/${PROJECT_NAME})
+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})
 
-message("CMAKE_MODULE_PATH: ${CMAKE_SYSTEM_MODULE_PATH}")
 # FIXME: each target must expose their headers via target_include_directories
 include_directories(${CMAKE_SOURCE_DIR}/src/protobuf ${CMAKE_SOURCE_DIR}/src/grpc)
 
@@ -74,7 +71,6 @@ add_subdirectory("src/generator")
 
 set(QTPROTOBUF_EXECUTABLE $<TARGET_FILE:${GENERATOR_TARGET}>)
 
-set(MAKE_TESTS OFF)
 if(DEFINED $ENV{MAKE_TESTS})
     set(MAKE_TESTS $ENV{MAKE_TESTS})
 elseif(NOT DEFINED MAKE_TESTS)

+ 0 - 1
examples/simplechat/CMakeLists.txt

@@ -11,7 +11,6 @@ set(GENERATED_HEADERS
     chatmessages.h
     user.h
     users.h
-    simplereply.h
     none.h
     simplechatclient.h)
 

+ 6 - 6
src/grpc/CMakeLists.txt

@@ -20,17 +20,17 @@ file(GLOB HEADERS asyncreply.h
     sslcredentials.h
     insecurecredentials.h)
 
-set(INCLUDE_DIRS PRIVATE ${CMAKE_SOURCE_DIR}/src/protobuf PUBLIC ${Qt5Core_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS})
+set(INCLUDE_DIRS INTERFACE ${CURRENT_SOURCE_DIR} PUBLIC ${CMAKE_SOURCE_DIR}/src/protobuf ${Qt5Core_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS})
 
-add_library(${SHARED_TARGET} SHARED ${SOURCES})
+add_library(${TARGET} ${SOURCES})
+target_include_directories(${TARGET} ${INCLUDE_DIRS})
+
+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 ${PROTOBUF_LIBRARY_TARGET} PUBLIC Qt5::Network Qt5::Core)
+target_link_libraries(${SHARED_TARGET} PRIVATE $<TARGET_FILE:${TARGET}> PUBLIC ${PROTOBUF_LIBRARY_TARGET} Qt5::Network Qt5::Core)
 add_dependencies(${SHARED_TARGET} ${PROTOBUF_LIBRARY_TARGET})
 
-add_library(${TARGET} ${SOURCES})
-target_include_directories(${TARGET} ${INCLUDE_DIRS})
-
 install(TARGETS ${TARGET} ${SHARED_TARGET}
     ARCHIVE DESTINATION ${TARGET_LIB_DIR}
     PUBLIC_HEADER DESTINATION ${TARGET_INCLUDE_DIR}

+ 6 - 6
src/protobuf/CMakeLists.txt

@@ -19,17 +19,17 @@ file(GLOB HEADERS
     selfcheckiterator.h
     qtprotobuflogging.h)
 
-set(INCLUDE_DIRS PUBLIC ${Qt5Core_INCLUDE_DIRS} ${Qt5Qml_INCLUDE_DIRS})
+set(INCLUDE_DIRS INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC ${Qt5Core_INCLUDE_DIRS} ${Qt5Qml_INCLUDE_DIRS})
 
-add_library(${SHARED_TARGET} SHARED ${SOURCES})
+add_library(${TARGET} ${SOURCES})
+target_include_directories(${TARGET} ${INCLUDE_DIRS})
+
+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} PUBLIC Qt5::Core Qt5::Qml)
+target_link_libraries(${SHARED_TARGET} PRIVATE $<TARGET_FILE:${TARGET}> PUBLIC Qt5::Core Qt5::Qml)
 add_dependencies(${SHARED_TARGET} ${PROTOBUF_LIBRARY_TARGET})
 
-add_library(${TARGET} ${SOURCES})
-target_include_directories(${TARGET} ${INCLUDE_DIRS})
-
 install(TARGETS ${TARGET} ${SHARED_TARGET}
     ARCHIVE DESTINATION ${TARGET_LIB_DIR}
     PUBLIC_HEADER DESTINATION ${TARGET_INCLUDE_DIR}