KGC_TEST/KGC/CMakeLists.txt

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})