Browse Source

refactor: 完善CMakeLists.txt文件

完善cmake程序
删除对lib文件依赖
使用find族语句寻找库和头文件位置
SongZihuan 4 years ago
parent
commit
cec92ceaa5
5 changed files with 30 additions and 35 deletions
  1. 8 5
      CMakeLists.txt
  2. 2 6
      argument/argument.c
  3. BIN
      lib/libvmcore.so
  4. 15 21
      vmcore/CMakeLists.txt
  5. 5 3
      vmcore/file/file.c

+ 8 - 5
CMakeLists.txt

@@ -6,7 +6,9 @@ OPTION(GC "GC" ON)
 OPTION(SET_DEBUG "SET_DEBUG" ON)
 OPTION(SET_DEBUG "SET_DEBUG" ON)
 
 
 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)
 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)
-SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY  ${CMAKE_CURRENT_SOURCE_DIR}/bin)
+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)
 
 
 IF (${SET_DEBUG})
 IF (${SET_DEBUG})
     ADD_DEFINITIONS(-DDEBUG=1)
     ADD_DEFINITIONS(-DDEBUG=1)
@@ -21,8 +23,8 @@ ELSE()
 ENDIF()
 ENDIF()
 
 
 ADD_DEFINITIONS(-DCC=\"${CMAKE_C_COMPILER}\")
 ADD_DEFINITIONS(-DCC=\"${CMAKE_C_COMPILER}\")
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/vmcore/include)
+ADD_DEFINITIONS(-DSYS=\"${CMAKE_SYSTEM}.${CMAKE_SYSTEM_PROCESSOR}\")
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/vmcore/include BEFORE)
 
 
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
 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 ARGUMENT_LIST)
@@ -30,8 +32,9 @@ AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/argument ARGUMENT_LIST)
 MESSAGE("project dir is ${PROJECT_SOURCE_DIR}")
 MESSAGE("project dir is ${PROJECT_SOURCE_DIR}")
 MESSAGE("cmake file in is ${CMAKE_CURRENT_SOURCE_DIR}")
 MESSAGE("cmake file in is ${CMAKE_CURRENT_SOURCE_DIR}")
 
 
-ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/vmcore)
-LINK_DIRECTORIES(${vmcore_BINARY_DIR})  # 添加vmcore的构建目录为寻找lib的目录
 MESSAGE("vmcore on ${vmcore_BINARY_DIR}")
 MESSAGE("vmcore on ${vmcore_BINARY_DIR}")
+LINK_DIRECTORIES(${vmcore_BINARY_DIR})  # 添加vmcore的构建目录为寻找lib的目录
+ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/vmcore)
 LINK_LIBRARIES(vmcore)
 LINK_LIBRARIES(vmcore)
 ADD_EXECUTABLE(VirtualMath main.c ${SRC_LIST} ${ARGUMENT_LIST})
 ADD_EXECUTABLE(VirtualMath main.c ${SRC_LIST} ${ARGUMENT_LIST})
+SET_TARGET_PROPERTIES(VirtualMath PROPERTIES OUTPUT_NAME "hellovm")

+ 2 - 6
argument/argument.c

@@ -1,12 +1,8 @@
 #include "hellovm.h"
 #include "hellovm.h"
 
 
 char *HelloString = "Welcome To VirtualMath ("__TIME__", "__DATE__") \n"
 char *HelloString = "Welcome To VirtualMath ("__TIME__", "__DATE__") \n"
-#ifdef __linux__
-                    "On Linux ("CC")\n"
-#else
-                    "On windows ("CC")\n"
-#endif
-                    "VirtualMath Command Line Mode\n";
+                    "On "SYS" ("CC")\n"
+                    "VirtualMath Command Line Mode (CLI: hellovm)\n";
 
 
 static const struct option long_option[]={
 static const struct option long_option[]={
         {"stderr",required_argument,NULL,'o'},
         {"stderr",required_argument,NULL,'o'},

BIN
lib/libvmcore.so


+ 15 - 21
vmcore/CMakeLists.txt

@@ -2,22 +2,15 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
 PROJECT(vmcore C)
 PROJECT(vmcore C)
 SET(CMAKE_C_STANDARD 11)
 SET(CMAKE_C_STANDARD 11)
 
 
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/parser/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ofunc/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/md5/include)
+SET(INCLUDE_DICT
+        ${CMAKE_CURRENT_SOURCE_DIR}/include
+        ${CMAKE_CURRENT_SOURCE_DIR}/parser/include
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/include
+        ${CMAKE_CURRENT_SOURCE_DIR}/ofunc/include
+        ${CMAKE_CURRENT_SOURCE_DIR}/md5/include
+        )
 
 
-#MESSAGE("CMAKE_SYSTEM_NAME is ${CMAKE_SYSTEM_NAME}")
-#IF (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
-#    INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/lib/linux/include)
-#    LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/lib/linux)
-#ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
-#    INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/lib/windows/include)
-#    LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/lib/windows)
-#ENDIF()
-#
-#LINK_LIBRARIES(ffi)  # 添加库
+INCLUDE_DIRECTORIES(${INCLUDE_DICT} BEFORE)
 
 
 # 搜索源文件
 # 搜索源文件
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/memory MEM_LIST)
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/memory MEM_LIST)
@@ -30,15 +23,16 @@ 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}/signalhandler HANDLER_LIST)
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/md5 MD5_LIST)
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/md5 MD5_LIST)
 
 
-FIND_LIBRARY(libffi ffi REQUIRED)
-FIND_LIBRARY(libdl dl REQUIRED)
-FIND_LIBRARY(libm m REQUIRED)
-
+# 处理依赖库
 FIND_PATH(ffih ffi.h REQUIRED)
 FIND_PATH(ffih ffi.h REQUIRED)
 INCLUDE_DIRECTORIES(${ffih})
 INCLUDE_DIRECTORIES(${ffih})
 
 
-MESSAGE("libm = ${libm}; libdl = ${libdl}; libffi = ${libffi}")
-MESSAGE("ffi.h = ${ffih};")
+FIND_LIBRARY(libffi NAMES ffi PATHS REQUIRED)
+FIND_LIBRARY(libdl dl REQUIRED)
+FIND_LIBRARY(libm m REQUIRED)
 
 
+MESSAGE("libm = ${libm}; 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})
 ADD_LIBRARY(vmcore SHARED ${SRC_LIST} ${GC_LIST} ${PASER_LIST} ${MEM_LIST} ${FILE_LIST} ${ARGUMENT_LIST} ${OFUNC_LIST} ${HANDLER_LIST} ${CLIB_LIST} ${MD5_LIST})
 TARGET_LINK_LIBRARIES(vmcore ${libffi} ${libdl} ${libm})
 TARGET_LINK_LIBRARIES(vmcore ${libffi} ${libdl} ${libm})
+SET_TARGET_PROPERTIES(vmcore PROPERTIES OUTPUT_NAME "vmcore" VERSION 2.1)

+ 5 - 3
vmcore/file/file.c

@@ -28,15 +28,17 @@ char *splitDir(char * dir){
 #ifdef __unix__
 #ifdef __unix__
     if (dir[memStrlen(dir) - 1] == '/')
     if (dir[memStrlen(dir) - 1] == '/')
 #else
 #else
-    if (dir[memStrlen(dir) - 1] == '\\')
+    if (dir[memStrlen(dir) - 1] == '\\')  // TODO-szh 设置 sep
 #endif  // __unix__
 #endif  // __unix__
     { dir[memStrlen(dir) - 1] = NUL; }
     { dir[memStrlen(dir) - 1] = NUL; }
 
 
+    if (
 #ifdef __unix__
 #ifdef __unix__
-    if ((slash = strrchr(dir, '/'))  == NULL)
+    (slash = strrchr(dir, '/'))  == NULL
 #else
 #else
-        if ((slash = strchr(dir, '\\'))  == NULL)
+    (slash = strchr(dir, '\\'))  == NULL
 #endif  // __unix__
 #endif  // __unix__
+    )
     { slash = dir; }
     { slash = dir; }
     else
     else
         slash ++;
         slash ++;