| enable_language(C) |
| |
| set(CMAKE_LINK_LIBRARIES_ONLY_TARGETS 1) |
| |
| # Use imported interface library to name toolchain-provided libraries. |
| add_library(toolchain::m INTERFACE IMPORTED) |
| set_property(TARGET toolchain::m PROPERTY IMPORTED_LIBNAME "m") |
| |
| # Linking directly warns. |
| add_executable(exe main.c) |
| target_link_libraries(exe PRIVATE |
| -lflag_in_exe # accepted |
| /abs/path/in_exe # accepted |
| rel/path/in_exe # accepted |
| toolchain::m # accepted |
| non_target_in_exe # rejected |
| ) |
| |
| # Link interfaces warn. |
| add_library(iface INTERFACE) |
| target_link_libraries(iface INTERFACE |
| -lflag_in_iface # accepted |
| /abs/path/in_iface # accepted |
| rel/path/in_iface # accepted |
| non_target_in_iface # rejected |
| ) |
| |
| # Imported target link interfaces warn if explicitly enabled. |
| add_library(iface_imported_checked INTERFACE IMPORTED) |
| target_link_libraries(iface_imported_checked INTERFACE |
| -lflag_iface_imported_checked # accepted |
| /abs/path/in_iface_imported_checked # accepted |
| rel/path/in_iface_imported_checked # accepted |
| non_target_in_iface_imported_checked # rejected |
| ) |
| set_property(TARGET iface_imported_checked PROPERTY LINK_LIBRARIES_ONLY_TARGETS 1) |
| |
| # Linking directly does not warn if explicitly disabled. |
| add_executable(exe_not_checked main.c) |
| target_link_libraries(exe_not_checked PRIVATE |
| non_target_in_exe_not_checked |
| ) |
| set_property(TARGET exe_not_checked PROPERTY LINK_LIBRARIES_ONLY_TARGETS 0) |
| |
| # Link interfaces do not warn if explicitly disabled. |
| add_library(iface_not_checked INTERFACE) |
| target_link_libraries(iface_not_checked INTERFACE |
| non_target_in_iface_not_checked |
| ) |
| set_property(TARGET iface_not_checked PROPERTY LINK_LIBRARIES_ONLY_TARGETS 0) |
| |
| # Imported target link interfaces do not warn if not explicitly enabled. |
| add_library(iface_imported_default INTERFACE IMPORTED) |
| target_link_libraries(iface_imported_default INTERFACE |
| non_target_in_iface_imported_default |
| ) |