Browse Source

Z991239-635 #comment cmake: 实现直接生成实体能够生成到运行版本的目录下

gifur 5 years ago
parent
commit
424a0690c4

+ 39 - 38
CMakeLists.txt

@@ -163,17 +163,6 @@ message("\n\n=-=-=-=-=-=-=-====-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=")
 
 message("CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}, CMAKE_GENERATOR: ${CMAKE_GENERATOR}")
 
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-set(CMAKE_PDB_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-if(WIN32)
-	set(RVC_PDB_BINARY_DIR "${CMAKE_BINARY_DIR}/bin/${CMAKE_CONFIGURATION_TYPES}")
-else()
-	set(RVC_PDB_BINARY_DIR ${CMAKE_BINARY_DIR}/bin)
-endif(WIN32)
-message(STATUS "RVC_PDB_BINARY_DIR: ${RVC_PDB_BINARY_DIR}")
-
 if(MSVC)
 	set(LIB_PREFIX "")
 	set(LIB_SUFFIX ".dll")
@@ -184,26 +173,6 @@ else()
 	set(ROOT_INI_NAME "root.ini.unix")
 endif(MSVC)
 
-if(SIMULATE_DEV_AND_TEST_TEMP)
-# simulate the real executive path environment, for debug easily.
-	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/bin")
-	set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-	file(MAKE_DIRECTORY  ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-	file(MAKE_DIRECTORY  "${CMAKE_BINARY_DIR}/run/runinfo")
-	file(MAKE_DIRECTORY  "${CMAKE_BINARY_DIR}/run/runinfo/runcfg")
-	file(MAKE_DIRECTORY  "${CMAKE_BINARY_DIR}/run/hardwarecfg")
-	file(MAKE_DIRECTORY  "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/cfg")
-	file(MAKE_DIRECTORY  "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/mod")
-	file(COPY "${CMAKE_SOURCE_DIR}/addin/hardwarecfg/${ROOT_INI_NAME}" DESTINATION "${CMAKE_BINARY_DIR}/run/hardwarecfg")
-	file(RENAME "${CMAKE_BINARY_DIR}/run/hardwarecfg/${ROOT_INI_NAME}" "${CMAKE_BINARY_DIR}/run/hardwarecfg/root.ini")
-	file(GLOB SIMU_CONFIG_FILE "${CMAKE_SOURCE_DIR}/addin/cfg/*.ini")
-	file(COPY ${SIMU_CONFIG_FILE} DESTINATION "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/cfg")
-
-	file(GLOB SIMU_RUNCONFIG_FILE "${CMAKE_SOURCE_DIR}/addin/runinfo/runcfg/*.ini")
-	file(COPY ${SIMU_RUNCONFIG_FILE} DESTINATION "${CMAKE_BINARY_DIR}/run/runinfo/runcfg")
-
-	configure_file("${CMAKE_CURRENT_SOURCE_DIR}/addin/cfg/shell.ini.in" "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/cfg/shell.ini" @ONLY)
-endif(SIMULATE_DEV_AND_TEST_TEMP)#end simulate
 
 if(BUILD_TESTING)
 	include(CTest)
@@ -216,11 +185,15 @@ message(STATUS "CMAKE_GENERATOR_PLATFORM:  ${CMAKE_GENERATOR_PLATFORM}")
 set(RVC_DEBUG_MODE TRUE)
 
 string(TOLOWER ${BUILD_TYPE_NAME} _type)
+string(TOUPPER ${BUILD_TYPE_NAME} _type_upper)
+set(RVC_OUTPUT_SUFFIX "")
 if (_type STREQUAL debug)
 	add_compile_definitions(_DEBUG)
+	set(RVC_OUTPUT_SUFFIX "_${_type_upper}")
 elseif(_type STREQUAL release)
 	add_compile_definitions(NDEBUG)
 	set(RVC_DEBUG_MODE FALSE)
+	set(RVC_OUTPUT_SUFFIX "_${_type_upper}")
 endif()
 
 # Configure MSVC Runtime
@@ -303,6 +276,14 @@ endif(MSVC)
 set(CPACK_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}-${CMAKE_GENERATOR_PLATFORM}-${BUILD_TYPE_NAME}")
 set(CPACK_TOPLEVEL_TAG "${CMAKE_SYSTEM_NAME}-${CMAKE_GENERATOR_PLATFORM}-${BUILD_TYPE_NAME}")
 
+if(MSVC)
+	string(REPLACE "\\" "/" OUTPUT_VERSION_DIR_PATH ${OUTPUT_VERSION_DIR_PATH})
+	string(REPLACE "\\" "/" OUTPUT_CUR_DISK_PATH ${OUTPUT_CUR_DISK_PATH})
+endif(MSVC)
+set(CMAKE_INSTALL_PREFIX "${OUTPUT_CUR_DISK_PATH}")
+set(RVC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+
 if(WIN32)
    # dll rc version
 	string(TIMESTAMP RC_VERSION_YEAR "%Y")
@@ -378,18 +359,38 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
 # Configure files
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/addin/cfg/shell.ini.in" ${CMAKE_BINARY_DIR}/shell.ini @ONLY)
 
+if(SIMULATE_ON)
+	if(EXISTS "${RVC_INSTALL_PREFIX}${CMAKE_INSTALL_BINDIR}" AND IS_DIRECTORY "${RVC_INSTALL_PREFIX}${CMAKE_INSTALL_BINDIR}")
+		message(STATUS "install directory existed.")
+		set(RVC_RUNTIME_OUTPUT_DIRECTORY "${RVC_INSTALL_PREFIX}${CMAKE_INSTALL_BINDIR}")
+	else()
+		message(STATUS "install directory \"${RVC_INSTALL_PREFIX}${CMAKE_INSTALL_BINDIR}\" is not existed!")
+		set(SIMULATE_ON OFF)
+	endif()
+endif(SIMULATE_ON)
+
+if(SIMULATE_ON)
+	message(STATUS "simulate the real executive path environment, for debug easily")
+	rvc_set_library_output_dir(${RVC_RUNTIME_OUTPUT_DIRECTORY})
+else()
+	set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+	set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+	set(CMAKE_PDB_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+	if(WIN32)
+		set(RVC_PDB_BINARY_DIR "${CMAKE_BINARY_DIR}/bin/${CMAKE_CONFIGURATION_TYPES}")
+	else()
+		set(RVC_PDB_BINARY_DIR ${CMAKE_BINARY_DIR}/bin)
+	endif(WIN32)
+	message(STATUS "RVC_PDB_BINARY_DIR: ${RVC_PDB_BINARY_DIR}")
+
+endif(SIMULATE_ON)#end simulate
+
 add_subdirectory(Other)
 add_subdirectory(Module)
 add_subdirectory(DevAdapter)
 
-# 
-if(MSVC)
-	string(REPLACE "\\" "/" OUTPUT_VERSION_DIR_PATH ${OUTPUT_VERSION_DIR_PATH})
-	string(REPLACE "\\" "/" OUTPUT_CUR_DISK_PATH ${OUTPUT_CUR_DISK_PATH})
-endif(MSVC)
-set(CMAKE_INSTALL_PREFIX "${OUTPUT_CUR_DISK_PATH}")
 set(CMAKE_INSTALL_LOCAL_ONLY ON)
-
 # Config package information.
 set(CPACK_SOURCE_IGNORE_FILES "/\\\\.git/;/\\\\.gitignore;/CMakeCache.txt;/\\\\build;/\\\\out")
 string(TOLOWER ${CMAKE_PROJECT_NAME} CMAKE_PROJECT_NAME_lower)

+ 25 - 17
DevAdapter/CMakeLists.txt

@@ -7,6 +7,9 @@ ENDIF(RVC_VERSION)
 if(RVC_INTEGRATE_BUILD)    
     set(DEVADAPTER_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
     include_directories(${RVC_COMMON_INCLUDE_DIR})
+    if(SIMULATE_ON)
+        rvc_set_library_output_dir("${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}")
+    endif(SIMULATE_ON)
 else()
     set(DEVADAPTER_INCLUDES_DIR ${DevHeadPath})
 endif(RVC_INTEGRATE_BUILD)
@@ -28,27 +31,32 @@ macro(rvc_dev_config_library _module_name _module_prefix)
     set_target_properties(${MODULE_FULL_NAME} PROPERTIES 
         OUTPUT_NAME "${_module_name}.${${_module_prefix}_CHARACTERISTIC}")
 
-    if(SIMULATE_DEV_AND_TEST_TEMP)
-    set_target_properties(${MODULE_FULL_NAME} 
-    PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/dep")
-    endif(SIMULATE_DEV_AND_TEST_TEMP)
+    if(SIMULATE_ON)
+        set_target_properties(${MODULE_FULL_NAME} PROPERTIES 
+            LIBRARY_OUTPUT_DIRECTORY_DEBUG "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
+            LIBRARY_OUTPUT_DIRECTORY_RELEASE "${RVC_INSTALL_PREFIX}${RVC_VENDOR_PATH}"
+        )
+    endif(SIMULATE_ON)
 
 endmacro(rvc_dev_config_library)
 
 macro(rvc_dev_target_install _target)
-if(MSVC)
-	install(TARGETS ${_target} 
-    RUNTIME DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
-    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
-    LIBRARY DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
-    )
-else()
-install(TARGETS ${_target} 
-    RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
-    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
-    LIBRARY DESTINATION "${RVC_VENDOR_PATH}"
-    COMPONENT libraries)
-endif(MSVC)
+    if(RVC_INTEGRATE_BUILD)
+        if(MSVC)
+	        install(TARGETS ${_target} 
+            RUNTIME DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
+            ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
+            LIBRARY DESTINATION "${RVC_VENDOR_PATH}" COMPONENT devadapters
+            )
+        else()
+        install(TARGETS ${_target} 
+            RUNTIME DESTINATION "${RVC_VENDOR_PATH}"
+            ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
+            LIBRARY DESTINATION "${RVC_VENDOR_PATH}"
+            COMPONENT libraries)
+        endif(MSVC)
+    endif(RVC_INTEGRATE_BUILD)
+
 endmacro(rvc_dev_target_install)
 
 add_subdirectory(test)

+ 3 - 1
Other/CMakeLists.txt

@@ -1,4 +1,6 @@
-
+if(SIMULATE_ON)
+	rvc_set_library_output_dir("${RVC_INSTALL_PREFIX}${RVC_RUNTIME_PATH}")
+endif(SIMULATE_ON)
 
 file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
 

+ 11 - 1
addin/cmake/BuildMakeSettings.cmake

@@ -11,4 +11,14 @@ SET(ThirdPartyHeadRoot "${PROJECT_SOURCE_DIR}/ThirdParty/Include")
 #SET(FrameworkLib "${PROJECT_SOURCE_DIR}/third_party")
 
 # <FrameworkHeadRoot>$(MSBuildProjectDirectory)\..\..\Framework\Include</ThirdPartyHeadRoot>
-#SET(FrameworkHeadRoot "${PROJECT_SOURCE_DIR}/third_party")
+#SET(FrameworkHeadRoot "${PROJECT_SOURCE_DIR}/third_party")
+
+macro(rvc_set_library_output_dir _dir)
+	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${_dir})
+	set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${_dir})
+
+	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${_dir})
+	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${_dir})
+	set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${_dir})
+	set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${_dir})
+endmacro(rvc_set_library_output_dir)

+ 1 - 1
addin/cmake/ConfigOptions.cmake

@@ -21,4 +21,4 @@ option(WITH_DEBUG_SYMBOLS "Pack debug symbols to installer" OFF)
 
 option(WITH_THIRD_PARTY "Build third-party components" ON)
 
-option(SIMULATE_DEV_AND_TEST_TEMP "/run/version/1.2.3.4/" ON)
+option(SIMULATE_ON "/run/version/1.2.3.4/" ON)

+ 11 - 9
module/CMakeLists.txt

@@ -37,10 +37,9 @@ if(BUILD_TESTING)
     set(BUILD_MOUDLE_TEST ON)
 endif(BUILD_TESTING)
 
-string(TOLOWER ${BUILD_TYPE_NAME} build_type)
-if (build_type STREQUAL debug)
-	# set(BUILD_MOUDLE_TEST ON)
-endif()
+if(SIMULATE_ON)
+    rvc_set_library_output_dir("${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
+endif(SIMULATE_ON)
 
 #对于 Windows 设置实体的版本信息
 #定义共享库输出
@@ -81,6 +80,14 @@ macro(add_module_libraries _module_prefix _module_name _module_version)
     endif(BUILD_MOUDLE_TEST)
 
     add_library(${_module_name} SHARED ${${_module_prefix}_SRCS} ${${_module_name}_TEST_SRCS})
+        # 设置工程输出路径,这操作在 Linux 才有效,在 Windows 感觉抽风了,死活不行,只能通过全局的方式进行设置
+    if(SIMULATE_ON)
+        set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_PATH "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
+        set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
+        set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
+        set_target_properties( ${_module_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE "${RVC_INSTALL_PREFIX}${RVC_MODULE_PATH}")
+        # etc for the other available configuration types (MinSizeRel, RelWithDebInfo)
+    endif()
 
     # 添加导出宏定义
     target_compile_definitions(${_module_name} PUBLIC "${_module_prefix}_EXPORTS")
@@ -98,11 +105,6 @@ macro(add_module_libraries _module_prefix _module_name _module_version)
     target_link_directories(${_module_name} PRIVATE
             ${RVC_FRAMEWORK_LIBRARIES_DIR})
 
-    # 设置工程输出路径
-    if(SIMULATE_DEV_AND_TEST_TEMP)
-        set_target_properties(${_module_name} 
-        PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/run/version/1.2.3.4/mod")
-    endif(SIMULATE_DEV_AND_TEST_TEMP)
 endmacro(add_module_libraries)
 
 # 设置实体的安装拷贝路径