1# 2# Copyright OpenEmbedded Contributors 3# 4# SPDX-License-Identifier: MIT 5# 6 7cmake_minimum_required(VERSION 3.22) 8 9project(cmake-example 10 VERSION 1.0.0 11 LANGUAGES CXX 12) 13 14option(BUILD_SHARED_LIBS "Build using shared libraries" ON) 15option(FAILING_TEST "Compile a failing unit test to test the test infrastructure" OFF) 16 17set(CMAKE_CXX_STANDARD 17) 18set(CMAKE_CXX_STANDARD_REQUIRED On) 19set(CMAKE_CXX_EXTENSIONS Off) 20 21include(GNUInstallDirs) 22 23# Linking a small library makes the example more useful for testing. 24find_package(json-c) 25 26# A simple library linking json-c library found by pkgconfig 27add_library(cmake-example-lib cpp-example-lib.cpp cpp-example-lib.hpp) 28set_target_properties(cmake-example-lib PROPERTIES 29 VERSION ${PROJECT_VERSION} 30 SOVERSION ${PROJECT_VERSION_MAJOR} 31) 32target_link_libraries(cmake-example-lib PRIVATE json-c::json-c) 33 34install(TARGETS cmake-example-lib 35 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 36 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 37 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 38) 39 40# A simple executable linking the library 41add_executable(cmake-example cpp-example.cpp) 42target_link_libraries(cmake-example PRIVATE cmake-example-lib) 43 44install(TARGETS cmake-example 45 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 46) 47 48# A simple test executable for testing the library 49add_executable(test-cmake-example test-cpp-example.cpp) 50target_link_libraries(test-cmake-example PRIVATE cmake-example-lib) 51 52if (FAILING_TEST) 53 target_compile_definitions(test-cmake-example PRIVATE FAIL_COMPARISON_STR="foo") 54endif(FAILING_TEST) 55 56install(TARGETS test-cmake-example 57 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 58) 59 60include(CTest) 61add_test(NAME test-cmake-example COMMAND test-cmake-example) 62