Есть ли LINK_DIRECTORIES или эквивалентное свойство в CMake?
Я создал проект с большим количеством команд link_directories(). Теперь я хотел бы сохранить результирующую строку каталогов в переменной. Для include_directories() это легко использовать
get_property( test_INCLUDE_DIRECTORIES TARGET test PROPERTY INCLUDE_DIRECTORIES )
однако, похоже, что нет свойства LINK_DIRECTORIES, чтобы сделать
get_property( test_LINK_DIRECTORIES TARGET test PROPERTY LINK_DIRECTORIES )
Есть ли способ получить список каталогов ссылок, используемых для цели?
(Примечание: я понимаю, что могу вручную отследить каталоги ссылок в переменной, а затем использовать один link_directories(), но он не выглядит очень чистым)
1 ответ
Посмотрите на LINK_DIRECTORIES
свойство каталога.
Дело в том, что link_directories
работает для каждого каталога (команда влияет на все цели, определенные в тех же CMakeLists, а также цели из всех его подкаталогов), в отличие, например, от target_include_directories
который работает на основе цели.
Вы можете запросить значение свойства с помощью:
get_property(test_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)
если вызывается из того же каталога, что и link_directories
вызов. В противном случае вам нужно указать (полный или относительный) путь в качестве дополнительного аргумента после DIRECTORY
, К сожалению, я не знаю способа получить соответствующий каталог для существующей цели.
Обратите внимание, что в целом использование link_directories
не рекомендуется в CMake, что, вероятно, является основной причиной, по которой он не очень хорошо поддерживается. Если у вас нет веских причин не делать этого, всегда следует придерживаться полного пути к библиотеке, переданного target_link_libraries
, Это избавит вас от многих головных болей в долгосрочной перспективе.