cmake_minimum_required(VERSION 3.14 FATAL_ERROR) # ---- Project ---- project( PEGParser VERSION 2.1 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 dependencies via CPM ---- 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.4 ) CPMAddPackage( NAME EasyIterator GITHUB_REPOSITORY TheLartians/EasyIterator VERSION 1.4 ) # ---- Add source files ---- file(GLOB_RECURSE headers CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") # ---- Create library ---- add_library(PEGParser ${headers} ${sources}) set_target_properties(PEGParser PROPERTIES CXX_STANDARD 17) target_compile_options(PEGParser PUBLIC "$<$:/permissive->") target_link_libraries(PEGParser PRIVATE EasyIterator) target_include_directories( PEGParser PUBLIC $ $ ) # ---- Create an installable target ---- # this allows users to install and find the library via `find_package()`. packageProject( NAME ${PROJECT_NAME} NAMESPACE ${PROJECT_NAME} VERSION ${PROJECT_VERSION} BINARY_DIR ${PROJECT_BINARY_DIR} INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} DEPENDENCIES EasyIterator )