tomlplusplus/examples/CMakeLists.txt
friendlyanon a9262c672f
Modernize the CMake build files (#102)
List of things that this commit brings:
* Makes the project `FetchContent` ready
  This is achieved by conditionally executing code that is only useful
  for a consumer of the project, such as examples.
* Componentize the install rules
  Because this is a header-only library, its install rules should be
  categorized in a dev component (think foo-dev packages in apt). By
  assigning all install rules to a component, the project no longer
  clobbers the global component when vendored (see the previous point).
* Provide an interface similar to the install interface when vendored
  This is achieved by adding SYSTEM to the include directories
  conditionally and only providing targets that are actually needed.
* Make the project architecture independant
  This is achieved by setting the ARCH_INDEPENDENT argument when
  generating the version config file, which is available since CMake
  3.14. This feature is intended to be used for header-only libraries.
* Misc changes for trivial packaging
  The install rules are written in a way that allows package maintainers
  to trivially package the project.

Co-authored-by: friendlyanon <friendlyanon@users.noreply.github.com>
2021-05-20 22:03:35 +03:00

26 lines
845 B
CMake

cmake_minimum_required(VERSION 3.14)
project(Examples LANGUAGES CXX)
include(../cmake/project-is-top-level.cmake)
if(PROJECT_IS_TOP_LEVEL)
find_package(tomlplusplus REQUIRED)
endif()
add_custom_target(run_examples COMMENT "Running all examples")
function(add_example name)
cmake_parse_arguments(PARSE_ARGV 1 "" "" "" ARGS)
add_executable("${name}" "${name}.cpp")
target_link_libraries("${name}" PRIVATE tomlplusplus::tomlplusplus)
target_compile_features("${name}" PRIVATE cxx_std_17)
add_custom_target("run_${name}" COMMAND "${name}" ${_ARGS} VERBATIM)
add_dependencies(run_examples "run_${name}")
endfunction()
add_example(error_printer)
add_example(simple_parser ARGS "${PROJECT_SOURCE_DIR}/example.toml")
add_example(toml_generator ARGS 100)
add_example(toml_to_json_transcoder ARGS "${PROJECT_SOURCE_DIR}/example.toml")