Improved cmake subproject support
- Added code to determine whether this is a standalone project or included by other projects. - Added option INSTALL_PROJECT to enable/disable install project. - Replaced CMAKE_BINARY_DIR to CMAKE_CURRENT_BINARY_DIR.
This commit is contained in:
parent
b43f8a0c22
commit
b7f04b700b
110
CMakeLists.txt
110
CMakeLists.txt
@ -7,7 +7,11 @@ else()
|
|||||||
project(miniz C)
|
project(miniz C)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
# determine whether this is a standalone project or included by other projects
|
||||||
|
set(MINIZ_STANDALONE_PROJECT OFF)
|
||||||
|
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||||
|
set(MINIZ_STANDALONE_PROJECT ON)
|
||||||
|
endif ()
|
||||||
|
|
||||||
set(MINIZ_API_VERSION 2)
|
set(MINIZ_API_VERSION 2)
|
||||||
set(MINIZ_MINOR_VERSION 1)
|
set(MINIZ_MINOR_VERSION 1)
|
||||||
@ -23,14 +27,19 @@ if(CMAKE_BUILD_TYPE STREQUAL "")
|
|||||||
CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
option(BUILD_EXAMPLES "Build examples" ON)
|
option(BUILD_EXAMPLES "Build examples" ${MINIZ_STANDALONE_PROJECT})
|
||||||
option(BUILD_FUZZERS "Build fuzz targets" OFF)
|
option(BUILD_FUZZERS "Build fuzz targets" OFF)
|
||||||
option(AMALGAMATE_SOURCES "Amalgamate sources into miniz.h/c" OFF)
|
option(AMALGAMATE_SOURCES "Amalgamate sources into miniz.h/c" OFF)
|
||||||
option(BUILD_HEADER_ONLY "Build a header-only version" OFF)
|
option(BUILD_HEADER_ONLY "Build a header-only version" OFF)
|
||||||
option(BUILD_SHARED_LIBS "Build shared library instead of static" ON)
|
option(BUILD_SHARED_LIBS "Build shared library instead of static" ON)
|
||||||
|
option(INSTALL_PROJECT "Install project" ${MINIZ_STANDALONE_PROJECT})
|
||||||
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
||||||
|
|
||||||
|
if(INSTALL_PROJECT)
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(BUILD_HEADER_ONLY)
|
if(BUILD_HEADER_ONLY)
|
||||||
set(AMALGAMATE_SOURCES ON CACHE BOOL "Build a header-only version" FORCE)
|
set(AMALGAMATE_SOURCES ON CACHE BOOL "Build a header-only version" FORCE)
|
||||||
endif(BUILD_HEADER_ONLY)
|
endif(BUILD_HEADER_ONLY)
|
||||||
@ -124,11 +133,13 @@ if(NOT BUILD_HEADER_ONLY)
|
|||||||
PRIVATE $<$<C_COMPILER_ID:GNU>:_GNU_SOURCE>)
|
PRIVATE $<$<C_COMPILER_ID:GNU>:_GNU_SOURCE>)
|
||||||
|
|
||||||
# pkg-config file
|
# pkg-config file
|
||||||
configure_file(miniz.pc.in ${CMAKE_BINARY_DIR}/miniz.pc @ONLY)
|
configure_file(miniz.pc.in ${CMAKE_CURRENT_BINARY_DIR}/miniz.pc @ONLY)
|
||||||
|
|
||||||
install(FILES
|
if(INSTALL_PROJECT)
|
||||||
${CMAKE_BINARY_DIR}/miniz.pc
|
install(FILES
|
||||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig)
|
${CMAKE_CURRENT_BINARY_DIR}/miniz.pc
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_property(TARGET ${PROJECT_NAME} PROPERTY
|
set_property(TARGET ${PROJECT_NAME} PROPERTY
|
||||||
@ -137,48 +148,50 @@ set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY
|
|||||||
COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION
|
COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION
|
||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets
|
if(INSTALL_PROJECT)
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
# users can use <miniz.h> or <miniz/miniz.h>
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
INCLUDES DESTINATION include ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
|
# users can use <miniz.h> or <miniz/miniz.h>
|
||||||
)
|
INCLUDES DESTINATION include ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
write_basic_package_version_file(
|
write_basic_package_version_file(
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
|
|
||||||
VERSION ${MINIZ_VERSION}
|
|
||||||
COMPATIBILITY AnyNewerVersion
|
|
||||||
)
|
|
||||||
|
|
||||||
export(EXPORT ${PROJECT_NAME}Targets
|
|
||||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake"
|
|
||||||
NAMESPACE ${PROJECT_NAME}::
|
|
||||||
)
|
|
||||||
configure_file(Config.cmake.in
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake"
|
|
||||||
@ONLY
|
|
||||||
)
|
|
||||||
|
|
||||||
set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
|
||||||
install(EXPORT ${PROJECT_NAME}Targets
|
|
||||||
FILE
|
|
||||||
${PROJECT_NAME}Targets.cmake
|
|
||||||
NAMESPACE
|
|
||||||
${PROJECT_NAME}::
|
|
||||||
DESTINATION
|
|
||||||
${ConfigPackageLocation}
|
|
||||||
)
|
|
||||||
install(
|
|
||||||
FILES
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||||
DESTINATION
|
VERSION ${MINIZ_VERSION}
|
||||||
${ConfigPackageLocation}
|
COMPATIBILITY AnyNewerVersion
|
||||||
COMPONENT
|
)
|
||||||
Devel
|
|
||||||
)
|
export(EXPORT ${PROJECT_NAME}Targets
|
||||||
|
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake"
|
||||||
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
|
)
|
||||||
|
configure_file(Config.cmake.in
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake"
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
|
||||||
|
set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
||||||
|
install(EXPORT ${PROJECT_NAME}Targets
|
||||||
|
FILE
|
||||||
|
${PROJECT_NAME}Targets.cmake
|
||||||
|
NAMESPACE
|
||||||
|
${PROJECT_NAME}::
|
||||||
|
DESTINATION
|
||||||
|
${ConfigPackageLocation}
|
||||||
|
)
|
||||||
|
install(
|
||||||
|
FILES
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||||
|
DESTINATION
|
||||||
|
${ConfigPackageLocation}
|
||||||
|
COMPONENT
|
||||||
|
Devel
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(BUILD_EXAMPLES)
|
if(BUILD_EXAMPLES)
|
||||||
set(EXAMPLE1_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example1.c")
|
set(EXAMPLE1_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/examples/example1.c")
|
||||||
@ -250,6 +263,7 @@ endif()
|
|||||||
|
|
||||||
set(INCLUDE_INSTALL_DIR "include")
|
set(INCLUDE_INSTALL_DIR "include")
|
||||||
|
|
||||||
install(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
|
if(INSTALL_PROJECT)
|
||||||
|
install(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user