mirror of
https://github.com/martinus/unordered_dense.git
synced 2026-01-18 17:21:27 +01:00
Updated cmake
Makes the library more easy to use and installable.
This commit is contained in:
@@ -4,19 +4,58 @@ project("unordered_dense"
|
||||
DESCRIPTION "A fast & densely stored hashmap and hashset based on robin-hood backward shift deletion"
|
||||
HOMEPAGE_URL "https://github.com/martinus/unordered_dense")
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
# determine whether this is a standalone project or included by other projects
|
||||
set(_unordered_dense_is_included ON)
|
||||
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||
set(_unordered_dense_is_included OFF)
|
||||
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
||||
set(_unordered_dense_is_toplevel_project TRUE)
|
||||
else()
|
||||
set(_unordered_dense_is_toplevel_project FALSE)
|
||||
endif()
|
||||
|
||||
if(_unordered_dense_is_included)
|
||||
add_library(unordered_dense INTERFACE)
|
||||
add_library(unordered_dense::unordered_dense ALIAS unordered_dense)
|
||||
target_compile_features(unordered_dense INTERFACE cxx_std_17)
|
||||
target_include_directories(
|
||||
unordered_dense
|
||||
INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
||||
add_library(unordered_dense INTERFACE)
|
||||
add_library(unordered_dense::unordered_dense ALIAS unordered_dense)
|
||||
|
||||
target_include_directories(
|
||||
unordered_dense
|
||||
INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
||||
|
||||
target_compile_features(unordered_dense INTERFACE cxx_std_17)
|
||||
|
||||
if(_unordered_dense_is_toplevel_project)
|
||||
# locations are provided by GNUInstallDirs
|
||||
install(
|
||||
TARGETS unordered_dense
|
||||
EXPORT unordered_dense_Targets
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file(
|
||||
"unordered_denseConfigVersion.cmake"
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY SameMajorVersion)
|
||||
|
||||
configure_package_config_file(
|
||||
"${PROJECT_SOURCE_DIR}/cmake/unordered_denseConfig.cmake.in"
|
||||
"${PROJECT_BINARY_DIR}/unordered_denseConfig.cmake"
|
||||
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unordered_dense/cmake)
|
||||
|
||||
install(
|
||||
EXPORT unordered_dense_Targets
|
||||
FILE unordered_denseTargets.cmake
|
||||
NAMESPACE unordered_dense::
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unordered_dense/cmake)
|
||||
|
||||
install(
|
||||
FILES "${PROJECT_BINARY_DIR}/unordered_denseConfig.cmake"
|
||||
"${PROJECT_BINARY_DIR}/unordered_denseConfigVersion.cmake"
|
||||
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unordered_dense/cmake)
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/include/ankerl
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
endif()
|
||||
|
||||
4
cmake/unordered_denseConfig.cmake.in
Normal file
4
cmake/unordered_denseConfig.cmake.in
Normal file
@@ -0,0 +1,4 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
|
||||
check_required_components("@PROJECT_NAME@")
|
||||
6
example/CMakeLists.txt
Normal file
6
example/CMakeLists.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
project("UnorderedDenseExample")
|
||||
|
||||
add_executable(UnorderedDenseExample main.cpp)
|
||||
find_package(unordered_dense CONFIG REQUIRED)
|
||||
target_link_libraries(UnorderedDenseExample unordered_dense::unordered_dense)
|
||||
16
example/README.md
Normal file
16
example/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
A simple example that demonstrats how to make use of `unordered_dense` with cmake.
|
||||
|
||||
Use globally installed `unordered_dense`:
|
||||
```sh
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX:PATH=${HOME}/unordered_dense_install ..
|
||||
make
|
||||
```
|
||||
|
||||
Use locall installed `unordered_dense`, as in the main README.md:
|
||||
|
||||
```sh
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX:PATH=${HOME}/unordered_dense_install ..
|
||||
make
|
||||
```
|
||||
13
example/main.cpp
Normal file
13
example/main.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include <ankerl/unordered_dense.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
auto main() -> int {
|
||||
auto map = ankerl::unordered_dense::map<int, std::string>();
|
||||
map[123] = "hello";
|
||||
map[987] = "world!";
|
||||
|
||||
for (auto const& [key, val] : map) {
|
||||
std::cout << key << " => " << val << std::endl;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user