CMakeLists.txt 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
  2. PROJECT(vmcore C)
  3. SET(CMAKE_C_STANDARD 11)
  4. SET(VMCORE_INCLUDE_DICT
  5. ${CMAKE_CURRENT_SOURCE_DIR}/include
  6. ${CMAKE_CURRENT_SOURCE_DIR}/parser/include
  7. ${CMAKE_CURRENT_SOURCE_DIR}/src/include
  8. ${CMAKE_CURRENT_SOURCE_DIR}/ofunc/include
  9. ${CMAKE_CURRENT_SOURCE_DIR}/md5/include
  10. )
  11. SET(VMCORE_SRC_DIR
  12. ${CMAKE_CURRENT_SOURCE_DIR}/memory
  13. ${CMAKE_CURRENT_SOURCE_DIR}/src
  14. ${CMAKE_CURRENT_SOURCE_DIR}/gc
  15. ${CMAKE_CURRENT_SOURCE_DIR}/file
  16. ${CMAKE_CURRENT_SOURCE_DIR}/parser
  17. ${CMAKE_CURRENT_SOURCE_DIR}/ofunc/src
  18. ${CMAKE_CURRENT_SOURCE_DIR}/ofunc/clib
  19. ${CMAKE_CURRENT_SOURCE_DIR}/signalhandler
  20. ${CMAKE_CURRENT_SOURCE_DIR}/md5
  21. )
  22. # 添加头文件
  23. INCLUDE_DIRECTORIES(${VMCORE_INCLUDE_DICT} BEFORE)
  24. # 搜索源文件
  25. FOREACH(DIR ${VMCORE_SRC_DIR})
  26. SET(TMP) # 清空
  27. AUX_SOURCE_DIRECTORY(${DIR} TMP)
  28. SET(SRC ${SRC} ${TMP}) # 列表追加
  29. ENDFOREACH()
  30. MESSAGE(STATUS "vmcore src list = ${SRC}")
  31. # 处理依赖库
  32. FIND_PATH(ffih ffi.h REQUIRED)
  33. INCLUDE_DIRECTORIES(${ffih})
  34. FIND_LIBRARY(libffi NAMES ffi REQUIRED)
  35. FIND_LIBRARY(libdl NAMES dl REQUIRED)
  36. IF (libffi AND ffih)
  37. MESSAGE(STATUS "libffi = ${libffi} ffi.h in ${ffih}")
  38. ELSE()
  39. MESSAGE(FATAL_ERROR "not found libffi or ffi.h")
  40. ENDIF()
  41. IF (libdl)
  42. MESSAGE(STATUS "libdl = ${libdl}")
  43. ELSE()
  44. MESSAGE(FATAL_ERROR "not found libdl")
  45. ENDIF()
  46. IF (PG)
  47. ADD_COMPILE_OPTIONS(-pg)
  48. ADD_LINK_OPTIONS(-pg)
  49. ADD_LIBRARY(vmcore STATIC ${SRC}) ## debug模式下, 以静态库形式链接
  50. ELSE()
  51. ADD_LIBRARY(vmcore SHARED ${SRC})
  52. ENDIF()
  53. #ADD_LIBRARY(vmcore SHARED ${SRC})
  54. TARGET_LINK_LIBRARIES(vmcore ${libffi} ${libdl} m)
  55. TARGET_INCLUDE_DIRECTORIES(vmcore PRIVATE VMCORE_INCLUDE_DICT)
  56. SET_TARGET_PROPERTIES(vmcore PROPERTIES
  57. PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/virtualmath.h # 设置public的头文件
  58. OUTPUT_NAME "vmcore" # 设置输出名
  59. VERSION 2.1 # 设置版本号
  60. )
  61. INSTALL(TARGETS vmcore)