Skip to content

Commit 2c84941

Browse files
committed
Added building using CMake and packaging using CPack
1 parent 5c569bb commit 2c84941

4 files changed

Lines changed: 92 additions & 0 deletions

File tree

.gitmodules

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[submodule "cmake/thirdParty/Boilerplate"]
2+
path = cmake/thirdParty/Boilerplate
3+
url = https://github.com/KOLANICH-libs/Boilerplate.cmake
4+
branch = master
5+
shallow = true
6+
7+
[submodule "cmake/thirdParty/DoxygenUtils"]
8+
path = cmake/thirdParty/DoxygenUtils
9+
url = https://github.com/KOLANICH-libs/DoxygenUtils.cmake
10+
branch = master
11+
shallow = true

CMakeLists.txt

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
cmake_minimum_required(VERSION 3.7.2)
2+
3+
set(CMAKE_USE_RELATIVE_PATHS TRUE)
4+
project("SimpleOpt")
5+
set("PROJECT_DESCRIPTION" "An another command-line parser class for C++ that has features not available in alternative solutions (getopt, boost, argtable, argstream, gflags) and doesn't require a steep learning curve.")
6+
set("PROJECT_HOMEPAGE_URL" "https://github.com/brofield/simpleopt")
7+
8+
set(CPACK_PACKAGE_VENDOR "Brodie Thiesfield et al.")
9+
set(CPACK_PACKAGE_VERSION_MAJOR "0")
10+
set(CPACK_PACKAGE_VERSION_MINOR "2")
11+
set(CPACK_PACKAGE_VERSION_PATCH "2")
12+
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
13+
14+
set(OUR_CMAKE_MODULES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
15+
set(OUR_CMAKE_3PARTY_MODULES_DIR "${OUR_CMAKE_MODULES_DIR}/thirdParty")
16+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${OUR_CMAKE_MODULES_DIR}" "${OUR_CMAKE_3PARTY_MODULES_DIR}" "${OUR_CMAKE_3PARTY_MODULES_DIR}/Boilerplate" "${OUR_CMAKE_3PARTY_MODULES_DIR}/DoxygenUtils")
17+
18+
19+
include(Boilerplate)
20+
include(DoxygenUtils)
21+
22+
set(Include_dir "${CMAKE_CURRENT_SOURCE_DIR}/include")
23+
set(Examples_Dir "${CMAKE_CURRENT_SOURCE_DIR}/examples")
24+
25+
buildAndPackageLib(${PROJECT_NAME}
26+
TYPE INTERFACE
27+
COMPONENT "lib"
28+
DESCRIPTION "${PROJECT_DESCRIPTION}"
29+
PUBLIC_INCLUDES ${Include_dir}
30+
DO_NOT_PASSTHROUGH
31+
)
32+
33+
option(WITH_EXAMPLES "Build examples" OFF)
34+
if(WITH_EXAMPLES)
35+
file(GLOB_RECURSE EXAMPLES "${Examples_Dir}/*.cpp")
36+
foreach(example ${EXAMPLES})
37+
get_filename_component(exampleName "${example}" NAME_WE)
38+
add_executable("${exampleName}" "${example}")
39+
harden("${exampleName}")
40+
add_sanitizers("${exampleName}")
41+
target_include_directories("${exampleName}" PRIVATE "${Include_dir}")
42+
endforeach()
43+
endif()
44+
45+
option(WITH_DOCS "Build docs" ON)
46+
if(WITH_DOCS)
47+
find_package(Doxygen REQUIRED dot)
48+
load_doxyfile("${CMAKE_CURRENT_SOURCE_DIR}/simpleopt.doxy")
49+
50+
set(DOXYGEN_PROJECT_BRIEF "${CPACK_PACKAGE_DESCRIPTION}")
51+
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "${CPACK_RESOURCE_FILE_README}")
52+
53+
set("DOXYGEN_GENERATE_HTML" YES)
54+
set("DOXYGEN_GENERATE_MAN" YES)
55+
56+
set("DOXYGEN_PROJECT_BRIEF" "${PROJECT_DESCRIPTION}")
57+
58+
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
59+
message(STATUS "Compiler is CLang, enabling CLang-assisted parsing in Doxygen.")
60+
set(DOXYGEN_CLANG_ASSISTED_PARSING YES)
61+
set(DOXYGEN_CLANG_OPTIONS "-I${Include_dir}")
62+
endif()
63+
64+
set(DOXYGEN_EXAMPLE_PATH "${Examples_Dir}")
65+
set(DOXYGEN_STRIP_FROM_PATH "${Include_dir}")
66+
set(DOXYGEN_STRIP_FROM_INC_PATH "${Include_dir}")
67+
68+
69+
file(GLOB HEADERS "${Include_dir}/*.h" "${Include_dir}/*.hxx" "${Include_dir}/*.hpp")
70+
doxygen_add_docs(docs
71+
"${HEADERS}"
72+
ALL
73+
USE_STAMP_FILE
74+
)
75+
endif()
76+
77+
#pass_through_cpack_vars()
78+
79+
include(CPack)

cmake/thirdParty/Boilerplate

Submodule Boilerplate added at e963872

cmake/thirdParty/DoxygenUtils

Submodule DoxygenUtils added at ad6b4d2

0 commit comments

Comments
 (0)