101 lines
4.3 KiB
CMake
101 lines
4.3 KiB
CMake
cmake_minimum_required(VERSION 3.21.0)
|
|
project(KGC LANGUAGES C)
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
set(MIRACL_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_BINARY_DIR}/output/include)
|
|
set(MIRACL_INSTALL_LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/output/temp)
|
|
set(MIRACL_INSTALL_BINDIR ${CMAKE_CURRENT_BINARY_DIR}/output/temp)
|
|
add_subdirectory(miracl)
|
|
|
|
aux_source_directory(. APP_SRC)
|
|
|
|
# 创建 KGC 静态库并链接 Miracl
|
|
add_library(${PROJECT_NAME} STATIC ${APP_SRC})
|
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC Miracl)
|
|
|
|
target_include_directories(${PROJECT_NAME} PUBLIC
|
|
include
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
)
|
|
|
|
file(GLOB_RECURSE MIRACL_HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/miracl/*.h)
|
|
file(COPY ${MIRACL_HEADER_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/output/include")
|
|
|
|
file(GLOB HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
|
|
file(COPY ${HEADER_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/output/include")
|
|
|
|
if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.a" OR "${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.lib")
|
|
if(MSVC)
|
|
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.lib)
|
|
else()
|
|
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.a)
|
|
endif()
|
|
endif()
|
|
|
|
if(APPLE)
|
|
add_custom_command(OUTPUT lib${PROJECT_NAME}All
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/output/lib"
|
|
COMMAND libtool -static -o "${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.a" $<TARGET_FILE:${PROJECT_NAME}> $<TARGET_FILE:Miracl>
|
|
DEPENDS ${PROJECT_NAME} Miracl)
|
|
elseif(MSVC)
|
|
add_custom_command(OUTPUT lib${PROJECT_NAME}All
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/output/lib"
|
|
COMMAND lib.exe "-OUT:${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.lib" $<TARGET_FILE:${PROJECT_NAME}> $<TARGET_FILE:Miracl>
|
|
DEPENDS ${PROJECT_NAME} Miracl)
|
|
elseif(WIN32)
|
|
add_custom_command(OUTPUT lib${PROJECT_NAME}All
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/output/temp"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/output/lib"
|
|
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> $<TARGET_FILE:Miracl> "${CMAKE_CURRENT_BINARY_DIR}/output/temp"
|
|
COMMAND cd "${CMAKE_CURRENT_BINARY_DIR}/output/temp"
|
|
COMMAND ${CMAKE_AR} x "${CMAKE_CURRENT_BINARY_DIR}/output/temp/libMiracl.a"
|
|
COMMAND ${CMAKE_AR} x "${CMAKE_CURRENT_BINARY_DIR}/output/temp/lib${PROJECT_NAME}.a"
|
|
COMMAND ${CMAKE_AR} crs "${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.a" "*.obj"
|
|
DEPENDS ${PROJECT_NAME} Miracl
|
|
)
|
|
else()
|
|
add_custom_command(OUTPUT lib${PROJECT_NAME}All
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/output/temp"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/output/lib"
|
|
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> $<TARGET_FILE:Miracl> "${CMAKE_CURRENT_BINARY_DIR}/output/temp"
|
|
COMMAND cd "${CMAKE_CURRENT_BINARY_DIR}/output/temp"
|
|
COMMAND ${CMAKE_AR} x "${CMAKE_CURRENT_BINARY_DIR}/output/temp/libMiracl.a"
|
|
COMMAND ${CMAKE_AR} x "${CMAKE_CURRENT_BINARY_DIR}/output/temp/lib${PROJECT_NAME}.a"
|
|
COMMAND ${CMAKE_AR} crs "${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.a" "*.o"
|
|
DEPENDS ${PROJECT_NAME} Miracl
|
|
)
|
|
endif()
|
|
|
|
add_custom_target(${PROJECT_NAME}All ALL DEPENDS lib${PROJECT_NAME}All)
|
|
|
|
if(KGC_INSTALL_BINDIR)
|
|
set(CMAKE_INSTALL_BINDIR ${KGC_INSTALL_BINDIR})
|
|
endif()
|
|
|
|
if(KGC_INSTALL_LIBDIR)
|
|
set(CMAKE_INSTALL_LIBDIR ${KGC_INSTALL_LIBDIR})
|
|
endif()
|
|
|
|
if(KGC_INSTALL_INCLUDEDIR)
|
|
set(CMAKE_INSTALL_INCLUDEDIR ${KGC_INSTALL_INCLUDEDIR})
|
|
endif()
|
|
|
|
install(TARGETS ${PROJECT_NAME}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
)
|
|
|
|
if(MSVC)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.lib"
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
else()
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/output/lib/lib${PROJECT_NAME}All.a"
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
endif()
|
|
|
|
file(GLOB HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/output/include/*.h)
|
|
install(FILES ${HEADER_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|