| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- include(RunCMake)
- function(build_project test)
- set(RunCMake_TEST_NO_CLEAN FALSE)
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
- if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
- list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
- endif()
- run_cmake(${test})
- set(RunCMake_TEST_NO_CLEAN TRUE)
- run_cmake_command(${test}-build ${CMAKE_COMMAND} --build . --config Release)
- endfunction()
- #[[
- These tests are not testing CPS as such, but rather are testing the way that
- CMake maps configurations; specifically, which MAP_IMPORTED_CONFIG_<CONFIG> is
- considered when selecting a configuration of a target required by another
- target for which a non-standard configuration has been selected.
- It happens that CMake's behavior is to always use the configuration of the
- project being built, and not the selected configuration of the consumer of the
- target for which configuration selection is occurring. This turns out to be
- advantageous, as it makes it relatively simple to use chains of interface
- targets to select along multiple configuration axes, since it is relatively
- simple for projects to set CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> to a list of
- preferred values along each axis and be sure the same list will be used for
- each level of selection.
- This test/example uses the following hierarchy:
- target "animal", configurations "cat", "dog"
- targets "cat", "dog", configurations "tame", "wild"
- The consuming project sets CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> to the list of
- desired values on each of the two axes, e.g. "CAT;TAME". This causes CMake to
- select the "CAT" configuration of the "animal" target, which links "cat",
- then, because CMake is still using MAP_IMPORTED_CONFIG_${CMAKE_BUILD_TYPE},
- to select the "TAME" configuration of the "cat" target.
- A more practical example is described by CPS, at
- https://cps-org.github.io/cps/recommendations.html.
- The main reason this is a "CPS" test is because CPS makes it possible to
- provide targets which implement multiple configuration axes in a way that is
- surprisingly usable by CMake consumers. However, CMake itself has no way of
- generating such exports as of when this test is being added (CMake 4.3). Thus,
- it is testing something which is suggested by CPS, but is unlikely to be
- encountered in a CMake-created package. (In principle, however, a hand-written
- CMake-script package description could produce equivalent imported targets.)
- #]]
- build_project(TestTameCat)
- build_project(TestWildCat)
- build_project(TestTameDog)
- build_project(TestWildDog)
|