Как удалить библиотеки, добавленные с link_libraries()
?
Да, я знаю, что должен использовать target_link_libraries()
. Я не могу, потому что я должен связать библиотеку с каждой будущей целью. Смотрите это . Библиотека построена на CMake. Это должно быть невидимым для разработчика C ++ / CMake. Ему не нужно беспокоиться об этой библиотеке. Пример:
add_library(link-to-all a.cpp)
link_libraries(link-to-all)
add_executable(e1 e1.cpp) # with link-to-all
add_executable(e2 e2.cpp) # with link-to-all
unlink_libraries(link-to-all) #does not exist!
add_executable(e3 e3.cpp) # without link-to-all
# all further targets link without link-to-all!
В моем случае link-to-all - это библиотека с реализацией для функций проверки покрытия. Он включается в зависимости от параметра конфигурации и должен неявно использоваться для всех будущих целей. Анализ покрытия может быть отключен для конкретных целей, поэтому я хочу иметь возможность отключить его.
Покрытие включается с помощью добавления CMAKE_<LANG>_COMPILE_OBJECT
и отключается при удалении префикса. Afaik это не может быть сделано для конкретных целей, только глобальные для будущих целей. Так что unlink_libraries()
будет функцией, которую я могу вызывать симметрично.
function(enable_coverage)
prepend_compiler();
link_libraries(cov);
# alternative with loosing target information/dependency
# prepend_system_libs(<path>/libcov.a)
endfunction()
function(disable_coverage)
reset_compiler();
unlink_libraries(cov);
# reset_system_libs()
endfunction()
Я мог бы использовать CMAKE_<LANG>_STANDARD_LIBRARIES
, (и также удалить ее там), но мне понадобится LOCATION
библиотеки (генераторавыражение: TARGET
) там. Но я бы тоже потерял интерфейсы link-to-all
. Кроме того, это, вероятно, удалит зависимости сборки.