cmake_minimum_required(VERSION 3.11) enable_language(CXX) project(generallib) add_subdirectory(general) find_package(libevent REQUIRED) set(EVENT__HAVE_LIBEVENT 1) message(STATUS "libevent include: " ${libevent_INCLUDE_DIR}) message(STATUS "libevent lib: " ${libevent_LIBRARIES}) message(STATUS "libevent lib Dirs: " ${libevent_LIB_DIRS}) SET(SRC_SDK sdk_main.c test/src/heapsort/main.c)#生成动态库需要至少包含一个源文件 add_library(generallib STATIC $ ${SRC_SDK}) message("CMAKE_BINARY_DIR is " ${CMAKE_BINARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/libd) link_directories(${libevent_LIB_DIRS}) set_target_properties(generallib PROPERTIES LINKER_LANGUAGE CXX) target_link_libraries(generallib public -Wl,--whole-archive libevent.a -Wl,--no-whole-archive ) message("current path is" ${CMAKE_CURRENT_SOURCE_DIR}) IF (WIN32) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") #message("using clang") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") #message("using gcc") #add_custom_command ( # TARGET generallib POST_BUILD # COMMAND ar -x # ${CMAKE_CURRENT_SOURCE_DIR}/libd/libevent.a # COMMENT "package library ar -x ${CMAKE_CURRENT_SOURCE_DIR}/libd/libevent.a " #) #add_custom_command ( # TARGET generallib POST_BUILD # COMMAND ar rc libgeneral.a *.obj # COMMENT "package library ar rc *.o " #) #add_custom_command( # TARGET generallib POST_BUILD # COMMAND del *.o *.obj # COMMENT "remove all step library" #) # using GCC elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") message("using asm") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") message("using msvc") endif() endif() # copy header files SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/obj) set(COPYITEM inc) file(GLOB INCLUDES ${PROJECT_SOURCE_DIR}/inc/*) file(COPY ${INCLUDES} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ) message("include dir " ${INCLUDES}) file(GLOB PatternINCLUDES ${PROJECT_SOURCE_DIR}/general/src/pattern/*) file(COPY ${PatternINCLUDES} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ) message( "copy pattern library" ${PatternINCLUDES}) file(GLOB EncryptINCLUDES ${PROJECT_SOURCE_DIR}/general/src/encrypt/*.h) file(COPY ${EncryptINCLUDES} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ) file(GLOB MathINCLUDES ${PROJECT_SOURCE_DIR}/general/src/math/*.hpp) message( "copy math library" ${MathINCLUDES}) add_custom_command(TARGET generallib PRE_LINK COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/general/src/math/eigen ${LIBRARY_OUTPUT_PATH}/inc/math/eigen) message( "copy third library") file(GLOB THIRD ${PROJECT_SOURCE_DIR}/general/third/include/*) file(COPY ${THIRD} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc/third/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ) message( "copy net ") file(GLOB NET ${PROJECT_SOURCE_DIR}/general/src/net/*.h) file(COPY ${NET} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ) file(GLOB ALGORITHM ${PROJECT_SOURCE_DIR}/general/src/algorithm/*) file(COPY ${ALGORITHM} DESTINATION ${LIBRARY_OUTPUT_PATH}/inc/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE GROUP_READ WORLD_READ)