# Adding Usage Requirements for Library # Usage requirements allow for far better control over a library / executable's link and include line. While also giving more control over the transitive property of targets inside CMake. The primary commands that leverage usage requirements are: - target_compile_definitions - target_compile_options - target_include_directories - target_link_libraries First up is MathFunctions. We first state that anybody linking to MathFunctions needs to include the current source directory, while MathFunctions itself doesn't. So this can become an INTERFACE usage requirement. Remember INTERFACE means things that consumers require but the producer doesn't. target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) Now that we've specified usage requirements for MathFunctions we can safely remove our uses of the EXTRA_INCLUDES variable. Run cmake or cmake-gui to configure the project and then build it with your chosen build tool.