У меня есть библиотека A
с общими и частными зависимостями.Модульные тесты содержатся в отдельном исполняемом файле ATests
, который требует связать как частные, так и публичные зависимости A
.
. В настоящее время я явно связываю все частные зависимости A
с модулем.тесты ATest
.Это приводит к значительному дублированию кода, которое становится все труднее понять / поддерживать.
add_library(A)
target_link_libraries(A PUBLIC Pub1 PRIVATE Priv1 Priv2)
add_executable(ATests)
target_link_libraries(ATests PRIVATE A Priv1 Priv2)
Я думал о создании отдельной библиотеки интерфейсов APrivDeps
для частных зависимостей A
, однако это выглядиткак взломатьУ меня есть серьезные сомнения, что это переносимо и испортит статическое соединение из-за распространения зависимости соединения.(Я должен был бы экспортировать вспомогательную библиотеку APrivDeps
.)
add_library(APrivDeps)
target_link_libraries(APrivDeps PUBLIC Priv1 Priv2)
add_library(A)
target_link_libraries(A PUBLIC Pub1 PRIVATE ADeps)
add_executable(ATests)
target_link_libraries(ATests PRIVATE A ADeps)
Я ожидаю, что какой-то метод сделает конфигурацию короткой и свободной от дублирования кода, но все же следуя целевому принципу современного CMake.