title: How to make a header-only library with cmake?
body: <p>How to make a project in cmake that collects all c++ files into one header?</p>
  
  <p>I have this project structure.</p>
  
  <pre><code>/
    project/
       folder1/
           file.cpp
           file.hpp
       folder2/
           ...etc
       CMakeLists.txt
    tests/
       test.cpp
       CMakeLists.txt
  CMakeList.txt
  </code></pre>
  
  <p>root cmakelists.txt</p>
  
  <pre><code>cmake_minimum_required (VERSION 3.8)
  
  project ("CMakeProject"
      LANGUAGES C CXX)
  
  set(CMAKE_EXECUTABLE_SUFFIX ".exe")
  
  include(GNUInstallDirs)
  
  add_subdirectory ("project")
  
  
  option(ENABLE_TESTING OFF)
  
  if (ENABLE_TESTING)
      enable_testing()
      add_subdirectory("tests")
  endif()
  </code></pre>
  
  <p>CMakeLists.txt in project</p>
  
  <pre><code>cmake_minimum_required (VERSION 3.8)
  
  file(GLOB projectSRC
      "*/*.cpp"
      "*/*.hpp"
      "*.cpp"
      "*.hpp"
  )
  
  add_library(project INTERFACE)
  
  message(STATUS "CMake inatall directory: " ${CMAKE_INSTALL_INCLUDEDIR})
  target_include_directories(project 
      INTERFACE 
          $&lt;BUILD_INTERFACE:${PROJECT_INCLUDE_DIR}&gt;
          $&lt;INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}&gt;)
  </code></pre>
  
  <p>and test cmakelist.txt</p>
  
  <pre><code>cmake_minimum_required (VERSION 3.8)
  
  # install Catch2 testing library
  # (https://github.com/catchorg/Catch2/blob/master/docs/cmake-integration.md#installing-catch2-from-git-repository or use packet manager)
  find_package(Catch2 REQUIRED)
  
  file(GLOB testSRC
      "*.cpp"
  )
  
  add_executable(tests ${testSRC})
  
  target_link_libraries(tests
      Catch2::Catch2
      project)
  
  include(CTest)
  include(Catch)
  catch_discover_tests(tests)
  </code></pre>
  
  <p>How to generate one header and use it (in tests or other projects) or make this library able to have templates? The first is better.</p>