cmake_minimum_required(VERSION 3.14 FATAL_ERROR) # ---- Project ---- # Note: update this to your new project's name and version project(Greeter VERSION 1.0 LANGUAGES CXX ) # ---- Include guards ---- if(${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR}) message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there.") endif() # ---- Add source files ---- # Note: globbing sources is considered bad practice as CMake won't detect new files automatically. # Remember to always invoke cmake after changing files, or explicitly mention them here. FILE(GLOB_RECURSE headers "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") FILE(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") # ---- Add dependencies via CPM ---- # see https://github.com/TheLartians/CPM.cmake for more info include(cmake/CPM.cmake) # PackageProject.cmake will be used to make our target installable CPMAddPackage( NAME PackageProject.cmake GITHUB_REPOSITORY TheLartians/PackageProject.cmake VERSION 1.0 ) # ---- Create library ---- # Note: # for single header libraries use `add_library(Greeter INTERFACE)` instead add_library(Greeter ${headers} ${sources}) # Note: for single header libraries use the following instead: # set_target_properties(Greeter PROPERTIES INTERFACE_COMPILE_FEATURES cxx_std_17) set_target_properties(Greeter PROPERTIES CXX_STANDARD 17) # Link dependencies (if required) # target_link_libraries(Greeter PUBLIC cxxopts) # Note: change PUBLIC to INTERFACE for single header libraries target_include_directories(Greeter PUBLIC $ $ ) # ---- Create an installable target ---- # this allows users to install and find the library via `find_package()`. packageProject( NAME ${PROJECT_NAME} VERSION ${PROJECT_VERSION} BINARY_DIR ${PROJECT_BINARY_DIR} INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} )