Browse Source

fix & refactor: 修复了上次(78b0f365)重构的bug

78b0f365重构了cmake文件, 拆分出多个动态库
导致在windows平台中链接出现错误
目前在windows平台重构代码可以编译
SongZihuan 4 years ago
parent
commit
d47b2f022d

+ 7 - 4
vmcore/CMakeLists.txt

@@ -22,21 +22,24 @@ MESSAGE(STATUS "vmcore src list = ${SRC}")
 
 # 处理内部依赖库
 ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/signalhandler)
-ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/parser)
 ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/memory)
 ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/md5)
-ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/gc)
 ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/file)
+
+# 添加子目录(没有生成新的lib)
+ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/parser)
 ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/ofunc)
+ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/gc)
 
 # 添加头文件
 INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
-INCLUDE_DIRECTORIES(${OFUNC_INCLUDE_DICT} BEFORE)
+INCLUDE_DIRECTORIES(${vm_ofunc_include} BEFORE)
+INCLUDE_DIRECTORIES(${vm_parser_include} BEFORE)
 MESSAGE(STATUS "VMCORE_INCLUDE_DICT = ${VMCORE_INCLUDE_DICT}")
 
 # 编译和链接vmcore
 ADD_SUBDIRECTORY(${vmcore_SOURCE_DIR}/src)
-TARGET_LINK_LIBRARIES(vmcore_src vm_signal vm_parser vm_memory vm_md5 vm_gc vm_clib vm_obj vm_file)
+TARGET_LINK_LIBRARIES(vmcore_src vm_signal vm_memory vm_md5 vm_file)
 
 # 安装vmlib
 SET(VMLIB_PATH ${CMAKE_INSTALL_PREFIX}/vmlib)

+ 1 - 0
vmcore/file/CMakeLists.txt

@@ -6,5 +6,6 @@ INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
 AUX_SOURCE_DIRECTORY(${vm_file_SOURCE_DIR} VM_FILE_SRC)
 
 ADD_LIBRARY(vm_file SHARED ${VM_FILE_SRC})
+TARGET_LINK_LIBRARIES(vm_file vm_memory)
 SET_TARGET_PROPERTIES(vm_file PROPERTIES OUTPUT_NAME "vmio")
 INSTALL(TARGETS vm_file)

+ 2 - 10
vmcore/gc/CMakeLists.txt

@@ -1,10 +1,2 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
-PROJECT(vm_gc C)
-SET(CMAKE_C_STANDARD 11)
-
-INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
-AUX_SOURCE_DIRECTORY(${vm_gc_SOURCE_DIR} VM_GC_SRC)
-
-ADD_LIBRARY(vm_gc SHARED ${VM_GC_SRC})
-SET_TARGET_PROPERTIES(vm_gc PROPERTIES OUTPUT_NAME "vmgc")
-INSTALL(TARGETS vm_gc)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} VM_GC_SRC)
+SET(vm_gc_src ${VM_GC_SRC} PARENT_SCOPE)

+ 4 - 7
vmcore/ofunc/CMakeLists.txt

@@ -1,7 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
-PROJECT(vm_ofunc C)
-SET(CMAKE_C_STANDARD 11)
-
-SET(OFUNC_INCLUDE_DICT ${PROJECT_SOURCE_DIR}/include)
-ADD_SUBDIRECTORY(${vm_ofunc_SOURCE_DIR}/clib)
-ADD_SUBDIRECTORY(${vm_ofunc_SOURCE_DIR}/src)
+ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/clib)
+ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src)
+SET(vm_ofunc_src ${vm_managers} ${vm_ofunc} PARENT_SCOPE)
+SET(vm_ofunc_include ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE)

+ 3 - 11
vmcore/ofunc/clib/CMakeLists.txt

@@ -1,12 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
-PROJECT(vm_clib C)
-SET(CMAKE_C_STANDARD 11)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SRC_FILES)
+SET(vm_managers ${SRC_FILES} PARENT_SCOPE)
 
-INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
-INCLUDE_DIRECTORIES(${OFUNC_INCLUDE_DICT} BEFORE)
-
-ADD_LIBRARY(vm_clib SHARED ${vm_clib_SOURCE_DIR}/manager)
-SET_TARGET_PROPERTIES(vm_clib PROPERTIES OUTPUT_NAME "clib")
-
-ADD_SUBDIRECTORY(${vm_clib_SOURCE_DIR}/src)
-INSTALL(TARGETS vm_clib)
+ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src)

+ 1 - 0
vmcore/ofunc/clib/src/CMakeLists.txt

@@ -8,6 +8,7 @@ INCLUDE_DIRECTORIES(${OFUNC_INCLUDE_DICT} BEFORE)
 FUNCTION(SET_CLIB PATH NAME)  # clib 编译为动态库, 但是不直接链接进入程序
     STRING(REGEX REPLACE ".+/(.+)\\..*" "\\1" FILE_NAME ${PATH})
     ADD_LIBRARY(${FILE_NAME} SHARED ${PATH})
+    TARGET_LINK_LIBRARIES(${FILE_NAME} vmcore_src)
     SET_TARGET_PROPERTIES(${FILE_NAME} PROPERTIES OUTPUT_NAME "vm${NAME}")
     INSTALL(TARGETS ${FILE_NAME})
 ENDFUNCTION()

+ 3 - 13
vmcore/ofunc/src/CMakeLists.txt

@@ -1,14 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
-PROJECT(vm_obj C)
-SET(CMAKE_C_STANDARD 11)
+ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/vmobj)
 
-ADD_SUBDIRECTORY(${vm_obj_SOURCE_DIR}/vmobj)
-
-INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
-INCLUDE_DIRECTORIES(${OFUNC_INCLUDE_DICT} BEFORE)
-AUX_SOURCE_DIRECTORY(${vm_obj_SOURCE_DIR} VM_OBJ_SRC)
-
-ADD_LIBRARY(vm_obj SHARED ${VM_OBJ_SRC})
-TARGET_LINK_LIBRARIES(vm_obj ${OBJ_LIST})  # 基础的obj类型直接链接
-SET_TARGET_PROPERTIES(vm_obj PROPERTIES OUTPUT_NAME "vmobj")
-INSTALL(TARGETS vm_obj)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} __ofunc)
+SET(vm_ofunc ${__ofunc} ${vm_obj_src} PARENT_SCOPE)

+ 1 - 15
vmcore/ofunc/src/vmobj/CMakeLists.txt

@@ -1,16 +1,2 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
-SET(CMAKE_C_STANDARD 11)
-
-INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
-INCLUDE_DIRECTORIES(${OFUNC_INCLUDE_DICT} BEFORE)
-
-SET(_OBJ_LIST)
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SRC_FILES)
-FOREACH(FILE_PATH ${SRC_FILES})
-    STRING(REGEX REPLACE ".+/(.+)\\..*" "\\1" FILE_NAME ${FILE_PATH})
-    ADD_LIBRARY(${FILE_NAME} SHARED ${FILE_PATH})
-    SET(_OBJ_LIST ${_OBJ_LIST} ${FILE_NAME})
-    SET_TARGET_PROPERTIES(${FILE_NAME} PROPERTIES OUTPUT_NAME ${FILE_NAME})
-    INSTALL(TARGETS ${FILE_NAME})
-ENDFOREACH(FILE_PATH)
-SET(OBJ_LIST ${_OBJ_LIST} CACHE INTERNAL "OBJ_LIST" FORCE)  # 作为全局变量
+SET(vm_obj_src ${SRC_FILES} PARENT_SCOPE)

+ 3 - 11
vmcore/parser/CMakeLists.txt

@@ -1,11 +1,3 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
-PROJECT(vm_parser C)
-SET(CMAKE_C_STANDARD 11)
-
-INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
-INCLUDE_DIRECTORIES(${vm_parser_SOURCE_DIR}/include BEFORE)
-AUX_SOURCE_DIRECTORY(${vm_parser_SOURCE_DIR} VM_PARSER_SRC)
-
-ADD_LIBRARY(vm_parser SHARED ${VM_PARSER_SRC})
-SET_TARGET_PROPERTIES(vm_parser PROPERTIES OUTPUT_NAME "parser")
-INSTALL(TARGETS vm_parser)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} VM_PARSER_SRC)
+SET(vm_parser_src ${VM_PARSER_SRC} PARENT_SCOPE)
+SET(vm_parser_include ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE)

+ 8 - 0
vmcore/src/CMakeLists.txt

@@ -6,6 +6,14 @@ SET(CMAKE_C_STANDARD 11)
 AUX_SOURCE_DIRECTORY(${vmcore_src_SOURCE_DIR} SRC)
 MESSAGE(STATUS "vmcore src list = ${SRC}")
 
+# 添加内部依赖库
+SET(SRC
+        ${SRC}
+        ${vm_gc_src}
+        ${vm_ofunc_src}
+        ${vm_parser_src}
+        )
+
 # 处理外部依赖库
 FIND_PATH(ffih ffi.h REQUIRED)
 INCLUDE_DIRECTORIES(${ffih})