ソースを参照

feat: 完善cmake文件

对hellovm添加依赖
vmcore使用foreach遍历源文件
SongZihuan 4 年 前
コミット
7c41397f41
2 ファイル変更58 行追加25 行削除
  1. 18 8
      CMakeLists.txt
  2. 40 17
      vmcore/CMakeLists.txt

+ 18 - 8
CMakeLists.txt

@@ -10,6 +10,11 @@ SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
 SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
 SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin-${CMAKE_BUILD_TYPE})
 
+SET(HELLOVM_INCLUDE_DICT
+        ${CMAKE_CURRENT_SOURCE_DIR}/include
+        ${CMAKE_CURRENT_SOURCE_DIR}/vmcore/include
+        )
+
 IF (${SET_DEBUG})
     ADD_DEFINITIONS(-DDEBUG=1)
 ELSE()
@@ -24,21 +29,26 @@ ENDIF()
 
 ADD_DEFINITIONS(-DCC=\"${CMAKE_C_COMPILER}\")
 ADD_DEFINITIONS(-DSYS=\"${CMAKE_SYSTEM}.${CMAKE_SYSTEM_PROCESSOR}\")
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/vmcore/include BEFORE)
+INCLUDE_DIRECTORIES(${HELLOVM_INCLUDE_DICT} BEFORE)
 
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/argument ARGUMENT_LIST)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/argument SRC_LIST)
 
-MESSAGE("project dir is ${PROJECT_SOURCE_DIR}")
-MESSAGE("cmake file in is ${CMAKE_CURRENT_SOURCE_DIR}")
+MESSAGE(STATUS "hellovm src = ${SRC_LIST}")
+MESSAGE(STATUS "project dir is ${PROJECT_SOURCE_DIR}")
+MESSAGE(STATUS "cmake file in is ${CMAKE_CURRENT_SOURCE_DIR}")
+MESSAGE(STATUS "vmcore on ${vmcore_BINARY_DIR}")
 
-MESSAGE("vmcore on ${vmcore_BINARY_DIR}")
 LINK_DIRECTORIES(${vmcore_BINARY_DIR})  # 添加vmcore的构建目录为寻找lib的目录
 ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/vmcore)
 
-ADD_EXECUTABLE(VirtualMath main.c ${SRC_LIST} ${ARGUMENT_LIST})
+ADD_EXECUTABLE(VirtualMath main.c ${SRC_LIST})
 TARGET_LINK_LIBRARIES(VirtualMath vmcore)
-SET_TARGET_PROPERTIES(VirtualMath PROPERTIES OUTPUT_NAME "hellovm")
-set_target_properties(VirtualMath PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")  # 添加rpath
+TARGET_INCLUDE_DIRECTORIES(vmcore PRIVATE HELLOVM_INCLUDE_DICT)
+ADD_DEPENDENCIES(VirtualMath vmcore)  # 添加依赖关系
+SET_TARGET_PROPERTIES(VirtualMath PROPERTIES
+        OUTPUT_NAME "hellovm"  # 设置输出名
+        INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"  # 设置rpath
+        )
 
 INSTALL(TARGETS VirtualMath)

+ 40 - 17
vmcore/CMakeLists.txt

@@ -2,7 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
 PROJECT(vmcore C)
 SET(CMAKE_C_STANDARD 11)
 
-SET(INCLUDE_DICT
+SET(VMCORE_INCLUDE_DICT
         ${CMAKE_CURRENT_SOURCE_DIR}/include
         ${CMAKE_CURRENT_SOURCE_DIR}/parser/include
         ${CMAKE_CURRENT_SOURCE_DIR}/src/include
@@ -10,18 +10,28 @@ SET(INCLUDE_DICT
         ${CMAKE_CURRENT_SOURCE_DIR}/md5/include
         )
 
-INCLUDE_DIRECTORIES(${INCLUDE_DICT} BEFORE)
+SET(VMCORE_SRC_DIR
+        ${CMAKE_CURRENT_SOURCE_DIR}/memory
+        ${CMAKE_CURRENT_SOURCE_DIR}/src
+        ${CMAKE_CURRENT_SOURCE_DIR}/gc
+        ${CMAKE_CURRENT_SOURCE_DIR}/file
+        ${CMAKE_CURRENT_SOURCE_DIR}/parser
+        ${CMAKE_CURRENT_SOURCE_DIR}/ofunc/src
+        ${CMAKE_CURRENT_SOURCE_DIR}/ofunc/clib
+        ${CMAKE_CURRENT_SOURCE_DIR}/signalhandler
+        ${CMAKE_CURRENT_SOURCE_DIR}/md5
+        )
+
+# 添加头文件
+INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
 
 # 搜索源文件
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/memory MEM_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/parser PASER_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/file FILE_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/gc GC_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ofunc/src OFUNC_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ofunc/clib CLIB_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/signalhandler HANDLER_LIST)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/md5 MD5_LIST)
+FOREACH(DIR ${VMCORE_SRC_DIR})
+    SET(TMP)  # 清空
+    AUX_SOURCE_DIRECTORY(${DIR} TMP)
+    SET(SRC ${SRC} ${TMP})  # 列表追加
+ENDFOREACH()
+MESSAGE(STATUS "vmcore src list = ${SRC}")
 
 # 处理依赖库
 FIND_PATH(ffih ffi.h REQUIRED)
@@ -30,11 +40,24 @@ INCLUDE_DIRECTORIES(${ffih})
 FIND_LIBRARY(libffi NAMES ffi REQUIRED)
 FIND_LIBRARY(libdl NAMES dl REQUIRED)
 
-MESSAGE("libdl = ${libdl}; libffi = ${libffi}")
-MESSAGE("ffi.h in ${ffih};")
-ADD_LIBRARY(vmcore SHARED ${SRC_LIST} ${GC_LIST} ${PASER_LIST} ${MEM_LIST} ${FILE_LIST} ${ARGUMENT_LIST} ${OFUNC_LIST} ${HANDLER_LIST} ${CLIB_LIST} ${MD5_LIST})
+IF (libffi AND ffih)
+    MESSAGE(STATUS "libffi = ${libffi} ffi.h in ${ffih}")
+ELSE()
+    MESSAGE(FATAL_ERROR "not found libffi or ffi.h")
+ENDIF()
+
+IF (libdl)
+    MESSAGE(STATUS "libdl = ${libdl}")
+ELSE()
+    MESSAGE(FATAL_ERROR "not found libdl")
+ENDIF()
+
+ADD_LIBRARY(vmcore SHARED ${SRC})
 TARGET_LINK_LIBRARIES(vmcore ${libffi} ${libdl} m)
-TARGET_INCLUDE_DIRECTORIES(vmcore PRIVATE INCLUDE_DICT)
-SET_TARGET_PROPERTIES(vmcore PROPERTIES PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/virtualmath.h)
-SET_TARGET_PROPERTIES(vmcore PROPERTIES OUTPUT_NAME "vmcore" VERSION 2.1)
+TARGET_INCLUDE_DIRECTORIES(vmcore PRIVATE VMCORE_INCLUDE_DICT)
+SET_TARGET_PROPERTIES(vmcore PROPERTIES
+        PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/virtualmath.h  # 设置public的头文件
+        OUTPUT_NAME "vmcore"  # 设置输出名
+        VERSION 2.1  # 设置版本号
+        )
 INSTALL(TARGETS vmcore)